【问题标题】:How do regex engines account for irregularity?正则表达式引擎如何解释不规则性?
【发布时间】:2026-01-14 02:10:01
【问题描述】:

我的 C 有点不稳定,但我查看了 python 的源代码,看起来大部分 python 的re 模块都是由状态机实现的。这并不奇怪,因为正则表达式可以简化为确定性有限状态机。

我想其他的正则表达式实现是相似的。但是根据教科书的定义,很少有现代正则表达式实现是常规的。那么他们如何解释不规则性,比如反向引用?

(.*)\1   // this is not regular

【问题讨论】:

    标签: regex algorithm finite-automata


    【解决方案1】:

    他们使用修改后的(超出有限状态的)自动机类来解决这个问题,并且比vanilla Thomson algorithm 更复杂的匹配算法。如果您找到任何特定“RE”引擎支持的自动机类的正式表征,您将非常幸运。

    根据我可以从 Python re 源代码中弥补的内容,它将组存储在缓冲区中(无论如何它必须这样做,因为它必须将其作为匹配对象的一部分返回)并在匹配算法,消耗的字符数与组匹配缓冲区中的字符数一样多。

    [可选的咆哮:不幸的是,RE 引擎在实践中是在 NFA 之上的黑客的集合,它们破坏了它们的数学属性。许多实现者忽略了regular languages 的优雅代数及其对正则关系的强大扩展,FSTs 可以有效地捕捉到这些。]

    【讨论】: