[英]Perl greedy regex is not acting greedy
.*
是贪婪的子模式,但不考虑分组。 分组是用一对未转义的括号定义的(请参阅使用括号进行分组和捕获 )。
查看组边界在哪里:
s/(.*?)\((.*)\)/$2/
| G1| |G2|
因此,匹配的\\(
和\\)
(
和)
在组之外 ,并且不会成为$1
和$2
。
如果您需要)
作为$2
一部分,请使用
s/(.*?)\((.*\))/$2/
^
正则表达式引擎从左到右同时处理字符串和模式。 首先处理第一个(.*?)
,它与第一个文字匹配(
因为它是惰性的符号(在可以返回有效匹配之前,请尽可能少地匹配字符),以及放在(
之前的整个部分)成第1组堆叠。然后,将(
匹配,但不是捕获的,然后(.*)
大于换行到最后其他任何0+字符匹配)
符号,并放置到捕获组2然后, )
是只是相匹配。问题的关键是, .*
抓住整个字符串到最后,但随后发生回溯自引擎试图以适应最终)
的格局。 )
必须匹配,但不能在您的模式中捕获,因此,由于组边界位置,它不属于组2。 您可以在此regex演示页面上看到regex调试器 ,以了解模式如何与您的字符串匹配。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.