正则表达式的大多数现代实现(例如perl或.NET中的实现)都超出了REGEX的经典计算机科学定义,具有诸如超前和超前的功能。这些功能是否使它们能够解析有限的非下拉自动机无法描述的语句?如果可以的话,这使他们更接近完成比赛吗?
正则表达式的大多数现代实现(例如perl或.NET中的实现)都超出了REGEX的经典计算机科学定义,具有诸如超前和超前的功能。这些功能是否使它们能够解析有限的非下拉自动机无法描述的语句?如果可以的话,这使他们更接近完成比赛吗?
Answers:
我认为真正的问题不在于无限的含义。这并不比解析任何其他情况都要糟糕。
问题在于表征反向引用的功能,它们既功能强大又非常有限:它们允许描述某些非上下文无关的语言,而不允许某些上下文无关的语言。例如,正则表达式(a*)b\1b\1
匹配的格式的字符串,你可以用泵引理表明这不是一个上下文无关语言。但是,另一方面,带有反向引用的正则表达式似乎不足以匹配平衡的括号语言,即原型上下文无关的语言。
给出定义语义来说明正则表达式语言中的字符串是很容易的,但是给出良好的自动机理论表征似乎更具挑战性。就像注册机一样,您可以在其中将输入的子字符串复制到其寄存器中,并且可以将其用于测试当前字符串,但是缺少修改这些寄存器的能力。
进行有限模型理论的人有一堆时髦的机器模型,知道这是否与他们的任何模型相对应会很有趣。
/(.*)\1/
但是原则上,正则表达式所指定的功能比常规语言更强大,因为这个相关问题的讨论更加详尽(也有一个漂亮的例子)。
从另一个问题(也与Suresh Venkat关联)得出的一个有趣结果是,“实用”正则表达式是NP完全的,因此它们的功能应等效于SAT。
作为非专家,虽然我同意直觉上“带有反向引用的正则表达式似乎不足以匹配平衡的括号语言”,但还是有些奇怪。NP完整性意味着任何NP问题都可以多项式化为正则表达式,因此可能只是从“平衡括号”语言到可被正则表达式识别的多项式多项式。但是同样,解析CFL可能会有一些荒谬的正则表达式,因为它们甚至可以解析非素一元数!
总的来说,教训可能是复杂性类和语言类不具有可比性。这也建议改写您的问题,引用Chomsky层次结构而不是“复杂性范围”(即使公平地说,我对此并不感到困惑)。
查尔斯·斯图尔特写道:
Aho,1990,“在字符串中查找模式的算法”表明,具有回溯功能的常规语言的隶属度问题是NP完整的。
可以在Google图书的第289页上找到部分预览(至少是声明的一部分),并在此处找到对该论文的参考书目。请注意,在本文中,rewbr代表带有BackReferences的正则表达式。