【发布时间】:2011-03-14 01:57:42
【问题描述】:
我知道将?: 放在正则表达式括号的开头会阻止它创建反向引用,这应该会更快。我的问题是,为什么要这样做?速度的提高是否足以值得考虑?在什么情况下,它会变得如此重要,以至于您每次不打算使用它时都需要小心地跳过反向引用。另一个缺点是它使正则表达式更难阅读、编辑和更新(如果您最终想在以后使用反向引用)。
总之,为什么不创建反向引用呢?
【问题讨论】:
-
与编程中的任何事情一样,小型设备的速度永远不值得担心。如果你在兆字节的文本上运行这个正则表达式,那么差异会很大。
-
@Travis,一些执行不力的正则表达式引擎会进行指数回溯,即使是很小的输入也会非常慢。我遇到了将一些 perl 移植到 python 的问题。 Python 已经用它的
re模块解决了很多问题,但是,你在正则表达式极端情况下看到的失败模式可能是 O(2**n) 最坏的情况。 -
@Mike 我听说过可怕的回溯实现,但是你如何达到 O(2^n)?其中 n = ?
标签: regex backreference