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

PHP regular expressions - Replacing one backreference

preg_replace()preg_replace_callback() 中有没有办法只替换一个反向引用?例如,我有这个正则表达式:/(\.popup)([\s\.{])/ 和这个字符串 .popup .popup-option。将生成的反向引用如下:[=15=] = .popup\s = .popup = \s。我只想用另一个字符串替换 。我该如何做到这一点?

谢谢。

您可以这样使用 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