Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 用重复捕获替换正则表达式_Php_Regex - Fatal编程技术网

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
指定要在匹配之前以引号为边界的匹配。