PHP正则表达式 - 替换一个反向引用[重复]
Posted
技术标签:
【中文标题】PHP正则表达式 - 替换一个反向引用[重复]【英文标题】:PHP regular expressions - Replacing one backreference [duplicate] 【发布时间】:2017-01-30 21:35:18 【问题描述】:preg_replace()
或 preg_replace_callback()
有没有办法只替换一个反向引用?例如,我有这个正则表达式:/(\.popup)([\s\.])/
和这个字符串.popup .popup-option
。将生成的反向引用如下:$0 = .popup\s
、$1 = .popup
、$2 = \s
。我只想用另一个字符串替换$1
。我该如何做到这一点?
谢谢。
【问题讨论】:
【参考方案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
【讨论】:
我错过的唯一场景是它只能是.popup
这不适用于这个正则表达式,因为我特别说它必须跟空格、点或 .不管怎样,我把你的答案稍微改成了/\.popup((?=[\s\.])|\z)/
以上是关于PHP正则表达式 - 替换一个反向引用[重复]的主要内容,如果未能解决你的问题,请参考以下文章