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

时间:2016-09-22 10:39:23

标签: php regex preg-replace preg-replace-callback

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

感谢。

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