PHP正则表达式-替换一个反向引用


PHP regular expressions - Replacing one backreference

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