正则表达式无法捕捉[...] [...]

时间:2015-11-20 09:57:57

标签: php regex preg-replace

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

我的字符串:

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

我希望捕获第一个 [...] 和第二个 [...] 中的值,然后在

中使用它
<b style='color:color'>car</b>

根据第一个 [...]

的值更改文字颜色

到目前为止,我有:

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

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

请帮忙!

2 个答案:

答案 0 :(得分:6)

更正的正则表达式是:

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

请参阅regex demo

请注意,您不必在角色类之外转义],也不需要/i修饰符,因为您的模式中没有字母。此外,要正确转义特殊正则表达式字符,您需要在双引号字符串中双重转义,或使用单引号字符串。

IDEONE demo

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

答案 1 :(得分:1)

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