preg_replace()
或preg_replace_callback()
中是否有办法只替换一个反向引用?例如,我有这个正则表达式:/(\.popup)([\s\.{])/
和这个字符串.popup .popup-option
。将生成的反向引用如下:$0 = .popup\s
,$1 = .popup
,$2 = \s
。我想用另一个字符串替换$1
。我该如何设法做到这一点?
感谢。
答案 0 :(得分:3)
您可以像这样使用preg_replace_callback
:
$s = '.popup .popup-option'; // original string
echo preg_replace_callback('/(\.popup)([\s\.{])/', function ($m) {
return 'foo' . $m[2]; }, $s);
//=> foo .popup-option
在回调中,我们返回一些与foo
连接的替换字符串$m[2]
,因此仅替换$m[1]
。
请注意,使用前瞻,您可以在preg_replace
中执行相同操作:
echo preg_replace('/\.popup(?=[\s\.{])/', 'foo', $s);
//=> foo .popup-option