给定以下PCRE REGEX:
(?(DEFINE)(?'pat'a|ab))^(?P>pat)b$
我希望它将与字符串ab
和abb
匹配。但是,它仅与ab
匹配(而不是abb
,请参见https://regex101.com/r/f70wge/1)。看来,回溯器没有进入命名的子图案。
在以下图案中插入时:
^(?:a|ab)b$
符合预期的字符串ab
和abb
。
是否可以更改上面的正则(带有命名模式),以使两个字符串匹配而不插入模式?
这是旧版本的PCRE的限制。我知道的唯一修复程序是升级到版本10.30。
http://www.pcre.org/changelog.txt:
版本10.30 14-August-2017
- 主解释器PCRE2_MATCH()已重构为新版本 这不使用递归函数调用(因此是堆栈) 记住回溯位置。这使得 - 可见的堆栈回程 不。新实施允许回溯到递归组调用中 模式,使其与perl 更兼容,并且还修复了其他一些 难以做的问题,例如Bugzilla中的#1887。
(重点是我的。)