为什么 Regexp 有超时方法,而理论上它们不应该有?

Why does Regexp have a timeout method, while in theory they shouldn't?

这是一道计算机科学理论题(计算理论)。

我知道正则表达式可能需要很长时间才能计算出来。然而,从计算理论我们知道,用正则表达式匹配可以在几个时钟周期内非常快地完成。

如果正则表达式等价于有限自动机,为什么正则表达式有(或需要)超时方法? 使用 DFA,匹配的计算时间可以非常快。

我所说的正则表达式是指主要语言中的正则表达式模式匹配 类; JavaScript、C#等

普通正则表达式("regex"s)不等同于自动机理论中的正则表达式(即正则语言)吗?

示例见:How do I timeout Regex operations to prevent hanging in .NET 4.5? and .

如果Regexp的匹配需要回溯,说明它们不等同于Regular Expressions

如果 "Regexp" 捕获的语言不是常规语言,从历史上看,为什么(出于这种需要)扩展它们?

如果生成的 DFA 需要大量状态?

因为正则表达式不等同于自动机理论中的正则表达式

它们更像是具有额外功能的表兄弟,这些功能使它们更加复杂,有时(取决于正则表达式)无法在长字符串上执行。

(out of which necessity) were they extended?

在缺少正则表达式功能的系统中扩展正则表达式实现需要困难的解决方法,例如用缺乏表达力的编程语言编写大量代码。还有一个严重的风险,即代码可能被证明是正确的、高性能的并且对误报匹配具有鲁棒性。

一个很好的理由是 catastrophic backtracking, which explains why matching of some regexes will not return before the heat death of the universe