在preg_replace()
或preg_replace_callback()
中是否有方法仅替换一个反向引用?例如,我有这个正则表达式:/('.popup)(['s'.{])/
和这个字符串.popup .popup-option
。生成的反向引用如下:$0 = .popup's
, $1 = .popup
, $2 = 's
。我想用另一个字符串替换$1
。我是怎么做到的?
谢谢。
您可以这样使用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