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
在 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