更改字符串中括号内的所有文本颜色 php

Change all text color inside brackets within a string php

我正在尝试更改由方括号或任何特殊字符标识的字符串中的文本颜色。假设我有这个字符串 -

$text = 'Hello [how are you?]';

如何更改括号中文字的颜色?

我试过 preg_match 但我做的不对..

$new_text = preg_replace('/(^|\s+)[([0-9a-zA-Z]+)](\b|$)/', '<span style="color:red;">#</span>', $text);

您只需要一个简单的正则表达式即可。 [ + 任意字符 + ]。而且只需要替换括号内的内容就可以使用()捕获组来封装可变文本

$new_text = preg_replace('/\[([^\]]+)\]/', '<span style="color:red;"></span>', $text);

编辑:

修改正则表达式。而不是匹配所有(这将匹配第二次出现的 ])我匹配所有直到第一次出现 ]

更好的是@msg 在评论中指出:正则表达式可以是:/\[(.*?)\]/

即使已经有了答案,让我分解一下您的正则表达式中的问题:

  • 原始正则表达式中的字符 class 不包含 ? 或空格。它也不能包含标点符号或连字符。
  • 外括号没有转义,因此引擎将其解释为字符 class(有效列表要匹配的字符),然后抛出语法错误。
  • 您正在使用捕获组作为锚点(之所以有效,是因为您在替换时考虑到了它们,但实际上并不需要)。

请参阅 以获得正确的表达式。