gpt4 book ai didi

c++ - QRegularExpression 是否删除了反向引用(因此搜索速度更快)

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:51:27 26 4
gpt4 key购买 nike

粗略查看 QRegexp 的文档显示它支持反向引用,而 QRegularExpression没有提到它。这是值得注意的,因为没有反向引用的正则表达式匹配可以按线性时间缩放,而包含反向引用则按指数时间缩放(source [dead link]cached version)。

一个类似的 StackOverflow answer还提到主要区别在于执行速度。考虑到新的正则表达式类可以采用一种新的算法是合乎逻辑的,这将允许它在线性时间内进行搜索,但是,我对此没有直接的了解。新的QRegularExpression类中是否有与上述类似的差异?

最佳答案

QRegularExpression departs from the functionality of QRegExp 在 5 个特定领域:

  1. 支持 \A\z
  2. 支持全局匹配
  3. 去除通配符匹配
  4. 删除了对劣质正则表达式语法的支持(现在仅支持 Perl 兼容正则表达式 (PCRE))
  5. 添加了对 *? 的支持和 +?修饰词
  6. 删除了对无用 QRegExp::CaretModes 的支持除了 QRegExp::CaretAtOffset

这些变化中的 4 与这个问题非常相关。 PCRE 是迄今为止最先进的正则表达式引擎。所以它当然支持反向引用以及许多其他功能 QRegExp永远无法企及。

至于没有明确提及 PCRE 提供的每个功能背后的基本原理与 PCRE 是由 70k 字文档定义的事实有关。如果您有兴趣烧穿碳粉盒,QRegularExpression直接链接到此页面:http://pcre.org/pcre.txt

顺便引用一下那本书,这些是 PCRE 支持的反向引用语法:

  • \n reference by number (can be ambiguous)
  • \gn reference by number
  • \g{n} reference by number
  • \g{-n} relative reference by number
  • \k<name> reference by name (Perl)
  • \k'name' reference by name (Perl)
  • \g{name} reference by name (Perl)
  • \k{name} reference by name (.NET)
  • (?P=name) reference by name (Python)

关于c++ - QRegularExpression 是否删除了反向引用(因此搜索速度更快),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38059446/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com