首页 > 解决方案 > 更改字符串php中括号内的所有文本颜色

问题描述

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

$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);

标签: phptextpreg-match

解决方案


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

  • 原始正则表达式中的字符类不包含?空格。它也不能包含标点符号或连字符。
  • 外部括号没有转义,因此引擎将其解释为字符类(要匹配的有效字符列表),而不是您想要的“方括号之间的任何内容” ,然后引发语法错误。
  • 您正在使用捕获组作为您的锚点(它之所以有效,是因为您在替换时将它们考虑在内,但并不是真正需要的)。

请参阅@simonw16 答案以获取正确的表达式。


推荐阅读