4

粗略查看文档QRegexp表明它支持反向引用,但QRegularExpression没有提及它。这将是值得注意的,因为没有反向引用的正则表达式匹配可以线性时间缩放,而包括反向引用则以指数时间缩放(源 [dead link]缓存版本)。

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

4

1 回答 1

4

QRegularExpression 偏离了QRegExp5 个特定领域的功能:

  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 按编号引用(可能不明确)
  • \gn 编号参考
  • \g{n} 编号参考
  • \g{-n} 数字相对参考
  • \k<name> 按名称引用 (Perl)
  • \k'name' 按名称引用 (Perl)
  • \g{name} 按名称引用 (Perl)
  • \k{name} 按名称引用 (.NET)
  • (?P=name) 按名称引用(Python)
于 2016-06-27T17:56:23.107 回答