【问题标题】:Named Subpattern backtracking does not work in PCRE命名子模式回溯在 PCRE 中不起作用
【发布时间】:2017-12-22 22:01:18
【问题描述】:

给定以下 PCRE 正则表达式:

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

我预计它会匹配字符串ababb。然而,它只匹配ab(而不是abb,参见https://regex101.com/r/F70wge/1)。回溯器似乎没有进入命名的子模式。

当内联模式如下:

^(?:a|ab)b$

ababb 两个字符串都按预期匹配。

是否可以更改上面的正则表达式(使用命名模式)以使两个字符串匹配而不内联模式?

【问题讨论】:

    标签: regex pcre


    【解决方案1】:

    这是旧版本 PCRE 的限制。我知道的唯一解决方法是升级到 10.30 版。

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

    版本 10.30 2017 年 8 月 14 日

    1. 主解释器 pcre2_match() 已重构为新版本 不使用递归函数调用(因此堆栈) 记住回溯位置。这使得 --disable-stack-for-recursion 成为 NOOP。 新的实现允许回溯到递归组呼 模式,使其与 Perl 更兼容,并修复了一些其他问题 难以解决的问题,例如 Bugzilla 中的 #1887。

    (强调我的。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-21
      • 2018-06-23
      • 2011-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-18
      相关资源
      最近更新 更多