Php 用重复捕获替换正则表达式
我正在努力做到以下几点: 捕获:Php 用重复捕获替换正则表达式,php,regex,Php,Regex,我正在努力做到以下几点: 捕获: ((.*) Common) \| (A, B, C) 替换为: $1 | H, I, J $2 'varX Common | A, B, C', 'asdf', 'varY Common | A, B, C', 'sdfg', 'varZ Common | A, B, C', 'qwer' 在一个sql文件上,该文件如下所示: $1 | H, I, J $2 'varX Common | A, B, C', 'asdf', 'varY Common
((.*) Common) \| (A, B, C)
替换为:
$1 | H, I, J $2
'varX Common | A, B, C', 'asdf', 'varY Common | A, B, C', 'sdfg', 'varZ Common | A, B, C', 'qwer'
在一个sql文件上,该文件如下所示:
$1 | H, I, J $2
'varX Common | A, B, C', 'asdf', 'varY Common | A, B, C', 'sdfg', 'varZ Common | A, B, C', 'qwer'
我遇到的问题是,如果匹配只出现一次,则字符串捕获效果很好,但当使用上面提供的字符串呈现时,捕获的内容比预期的要多。请尝试(.*Common)\\124;(A、B、C)
?
将*
切换为非贪婪。因此,它不是尽可能多地匹配文本,而是在第一次匹配时停止
基于
$1
,我假设您正在使用Perl、PHP等中的PCRE变体。谢谢您的回复。是的,这是PHP变体。不幸的是,这并没有限制捕获的方式,但它确实让我更接近。现在它似乎在第二次出现时包含了'asdf',在第三次出现时包含了'sdfg'。在我的例子中,我可以简单地指定:([a-zA-Z\s]*?)Common)\|(a,B,C)
我想知道如何正确地捕获引号中的项目,尽管你最好的选择是[^]+?
捕获在这种情况下不是注释的所有内容。或者,使用“”(.*)Common
指定要在匹配之前以引号为边界的匹配。