来自perlre手册页:
如果“(*ACCEPT)”位于捕获组内部,则这些组将在遇到“(*ACCEPT)”的点标记为结束。例如:
Run Code Online (Sandbox Code Playgroud)'AB' =~ /(A (A|B(*ACCEPT)|C) D)(E)/x;
将匹配,$1 将是“AB”,$2 将是“B”...
但是,如果第二个捕获组有量词,则模式永远不会匹配:
'AB' =~ /(A (A|B(*ACCEPT)|C)+ D)(E)/x or die "No match"; #dies
^
Run Code Online (Sandbox Code Playgroud)
为什么是这样?将+替换为*或 {0,99} 没有什么区别。 捕获组上包含 的任何(*ACCEPT)
量词似乎都会阻止 *ACCEPT 工作。预先感谢您的任何帮助。
小智 1
由于Perl 5.36 中修复的错误,正则表达式不匹配。PCRE 和 PCRE2 库不受此错误影响;使用量词,正则表达式将“ABCDE”中的“AB”以及 regex101 网站上的整个字符串“ABDE”与 PCRE 和 PCRE2 相匹配。