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正则表达式 - 替换一个反向引用[重复]的主要内容,如果未能解决你的问题,请参考以下文章

是否有用于反向引用的大写/小写版本的正则表达式替换术语? [复制]

Java中的正则表达式反向引用

IntelliJ 中的正则表达式反向引用

正则表达式替换问题

正则 捕获组之反向引用

正则表达式 - 分组分组引用反向引用多选非捕获分组