正则表达式无法捕获 [...][...] 中的值

Regex is failing to capture values inside [...][...]

我正在尝试更改字符串中文本的颜色:

我的字符串:

$message="I have a [red][car]";

我想捕获第一个 [...] 和第二个 [...] 中的值然后使用它在

<b style='color:color'>car</b>

根据第一个值改变文字颜色[...]

到目前为止我有:

echo preg_replace("/\[([^\]]+)\]\[([^\]+])\]/i","<b style='color:'></b>",$message);

但它不起作用,原始字符串作为输出返回。我不知道我的正则表达式在哪里失败了。

请帮忙!

更正后的正则表达式为:

'/\[([^\]]+)]\[([^\]]+)]/'

regex demo

请注意,您不必在字符 class 之外转义 ] 并且不需要 /i 修饰符,因为您的模式中没有字母。此外,要正确转义特殊的正则表达式字符,您需要在双引号字符串中进行两次转义,或者使用单引号字符串。

IDEONE demo:

$message="I have a [red][car]";
echo preg_replace('/\[([^\]]+)]\[([^\]]+)]/',"<b style='color:'></b>",$message);
// => I have a <b style='color:red'>car</b>
$message="I have a [red][car]";
echo preg_replace("/[^\[]+\[([^\]]+)\]\[([^\]]+)\]/i","&lt;b style='color:'&gt;&lt;/b&gt;",$message);