Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 正则表达式无法捕获[…][…]内的值_Php_Regex_Preg Replace - Fatal编程技术网

Php 正则表达式无法捕获[…][…]内的值

Php 正则表达式无法捕获[…][…]内的值,php,regex,preg-replace,Php,Regex,Preg Replace,我正在尝试更改字符串中文本的颜色: $message="I have a [red][car]"; 我的字符串: $message="I have a [red][car]"; 我想捕获第一个[…]和第二个[…]中的值,然后在中使用它 <b style='color:color'>car</b> 汽车 根据first[…]的值更改文本颜色 到目前为止,我已经: echo preg_replace("/\[([^\]]+)\]\[([^\]+])\]/i","<

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

$message="I have a [red][car]";
我的字符串:

$message="I have a [red][car]";
我想捕获第一个[…]和第二个[…]中的值,然后在中使用它

<b style='color:color'>car</b>
汽车
根据first[…]的值更改文本颜色

到目前为止,我已经:

echo preg_replace("/\[([^\]]+)\]\[([^\]+])\]/i","<b style='color:$1'>$2</b>",$message);
echo preg\u replace(“/\[([^\]+)\]\[([^\]+])\]/i“,“$2”,“$message”);
但它不工作,原始字符串作为输出返回。我不知道我的正则表达式在哪里失败了


请帮忙

修正后的正则表达式为:

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

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

:

$message=“我有一辆[红色][汽车]”;
回显preg\u replace('/\[([^\]]+)]\[([^\]]+)]]/'、“$2”、$message);
//我有一辆车

正确的正则表达式是:

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

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

:

$message=“我有一辆[红色][汽车]”;
回显preg\u replace('/\[([^\]]+)]\[([^\]]+)]]/'、“$2”、$message);
//我有一辆车

您放错了
]
:使用
'/\[([^\]+)\]\[([^\]+)\]/'
您放错了
]
:使用
'/\[([^\]+)\]\[([^\]+)\]\[([^\]]+)\]/'