2016-09-22 35 views
2

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

谢谢。

回答

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 

在回调,我们正在返回与$m[2]因此只得到$m[1]更换级联一些替换字符串foo


请注意,使用超前,你可以做同样的preg_replace

echo preg_replace('/\.popup(?=[\s\.{])/', 'foo', $s); 
//=> foo .popup-option 
+1

我唯一缺少的情况是,它只能是'.popup'不与此正则表达式工作因为我具体说它必须跟着空格,点或{。无论哪种方式,我稍微改变你的答案到'/ \。popup((?= [\ s \。{])| \ z)/' –