命名Subpattern回溯在PCRE中不起作用



给定以下PCRE REGEX:

(?(DEFINE)(?'pat'a|ab))^(?P>pat)b$

我希望它将与字符串ababb匹配。但是,它仅与ab匹配(而不是abb,请参见https://regex101.com/r/f70wge/1)。看来,回溯器没有进入命名的子图案。

在以下图案中插入时:

^(?:a|ab)b$

符合预期的字符串ababb

是否可以更改上面的正则(带有命名模式),以使两个字符串匹配而不插入模式?

这是旧版本的PCRE的限制。我知道的唯一修复程序是升级到版本10.30。

http://www.pcre.org/changelog.txt:

版本10.30 14-August-2017

  1. 主解释器PCRE2_MATCH()已重构为新版本 这不使用递归函数调用(因此是堆栈) 记住回溯位置。这使得 - 可见的堆栈回程 不。新实施允许回溯到递归组调用中 模式,使其与perl 更兼容,并且还修复了其他一些 难以做的问题,例如Bugzilla中的#1887。

(重点是我的。)

最新更新