Perl (... (*ACCEPT) ...)+ 从不匹配

jim*_*mav 6 regex perl

来自perlre手册页:

如果“(*ACCEPT)”位于捕获组内部,则这些组将在遇到“(*ACCEPT)”的点标记为结束。例如:

  'AB' =~ /(A (A|B(*ACCEPT)|C) D)(E)/x;
Run Code Online (Sandbox Code Playgroud)

将匹配,$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 相匹配。