这是理论上的计算机科学问题(计算理论)。
我知道RegExps可能需要很长时间才能计算出来。但是,根据计算理论,我们知道可以在几个时钟周期内非常快地完成与正则表达式的匹配。
如果RegExps等效于有限自动机,为什么RegExps具有(或要求)超时方法? 使用DFA,匹配的计算时间可以非常快。
用RegExps表示正则表达式模式匹配主要语言的类; JavaScript,C#等
常见的RegExps(“ regex”)是否不等同于自动机理论中的正则表达式(即正则语言)?
有关示例,请参见:How do I timeout Regex operations to prevent hanging in .NET 4.5?和Regex Pattern Catastrophic backtracking。
如果Regexp的匹配需要回溯,则意味着它们不等于正则表达式。
如果“ Regexp”捕获的语言不是常规语言,从历史上讲,为什么(出于某种必要)对其进行了扩展?
如果得出的DFA是否需要大量的状态集?
答案 0 :(得分:0)
因为正则表达式不等同于自动机理论中的正则表达式。
它们更像是具有额外功能的表亲,这使它们更加复杂,有时(取决于正则表达式)无法在长字符串上执行。
答案 1 :(得分:0)
一个很好的理由是catastrophic backtracking,这解释了为什么某些正则表达式的匹配不会在heat death of the universe之前返回。
答案 2 :(得分:-1)
(出于什么必要)被扩展了?
在缺少正则表达式功能的系统上扩展了正则表达式的实现,这些系统需要一些困难的解决方法,例如,用一种缺乏表现力的编程语言编写大量代码。该代码还存在很大的风险,即该代码可能正确,高效且能可靠地防止误报匹配。