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

时间:2018-10-11 17:53:20

标签: php text preg-match

我正在尝试更改由方括号或与此相关的任何特殊字符标识的字符串中的文本颜色。说我有此字符串-

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

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

我尝试了preg_match,但操作不正确。

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

2 个答案:

答案 0 :(得分:2)

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

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

编辑:

修改了正则表达式。我会匹配所有内容,直到第一次出现]

,而不是全部匹配(这将匹配第二次出现的]

最好还是在评论中使用@msg表示:正则表达式可以是:/\[(.*?)\]/

答案 1 :(得分:2)

即使已经有了答案,我也要解决您的正则表达式中的问题:

  • 原始正则表达式中的字符类不包含?或空格。它也不能包含标点符号或连字符。
  • 没有放好支架,所以引擎的解释是错误的。
  • 您正在使用捕获组作为锚点(之所以起作用,是因为您在替换时已将它们考虑在内,但并不是真正需要的,而是可以使用字符类)。

有关正确的表达式,请参见@simonw16 answer