大多数REGEX实现在哪里都属于复杂程度范围?


19

正则表达式的大多数现代实现(例如perl或.NET中的实现)都超出了REGEX的经典计算机科学定义,具有诸如超前和超前的功能。这些功能是否使它们能够解析有限的非下拉自动机无法描述的语句?如果可以的话,这使他们更接近完成比赛吗?


2
一个密切相关的问题:“带有反向引用的正则表达式”和“可以包含任意程序代码的正则表达式”之间是否有有趣的地方?例如,具有反向引用和向前/向后查找的正则表达式是否比具有反向引用但没有向后/ 向前查找的正则表达式严格更具表达性?关于Perl中的“特殊回溯控制动词”呢?
Jukka Suomela 2010年

Answers:


18

我认为真正的问题不在于无限的含义。这并不比解析任何其他情况都要糟糕。

问题在于表征反向引用的功能,它们既功能强大又非常有限:它们允许描述某些非上下文无关的语言,而不允许某些上下文无关的语言。例如,正则表达式(a*)b\1b\1匹配的格式的字符串,你可以用泵引理表明这不是一个上下文无关语言。但是,另一方面,带有反向引用的正则表达式似乎不足以匹配平衡的括号语言,即原型上下文无关的语言。一种ñb一种ñb一种ñ

给出定义语义来说明正则表达式语言中的字符串是很容易的,但是给出良好的自动机理论表征似乎更具挑战性。就像注册机一样,您可以在其中将输入的子字符串复制到其寄存器中,并且可以将其用于测试当前字符串,但是缺少修改这些寄存器的能力。

进行有限模型理论的人有一堆时髦的机器模型,知道这是否与他们的任何模型相对应会很有趣。


9

/(.*)\1/大号={ww|wΣ}wķ大号ķ={ww|wΣw∣≤ķ}ķ

但是原则上,正则表达式所指定的功能比常规语言更强大,因为这个相关问题的讨论更加详尽(也有一个漂亮的例子)。


{ww | w∈∑ ∗,∣w∣≤K}不会是CSL或TM可识别的吗?
dhruvbird

arggh。应该做ww ^ R。将修复。感谢
Suresh Venkat

实际上,我对此有疑问。是CSL还是图灵识别?我尚未(但还)无法提供LBA,所以想知道……
dhruvbird 2010年

1
{wwwΣ}

5

另一个问题(也与Suresh Venkat关联)得出的一个有趣结果是,“实用”正则表达式是NP完全的,因此它们的功能应等效于SAT。

作为非专家,虽然我同意直觉上“带有反向引用的正则表达式似乎不足以匹配平衡的括号语言”,但还是有些奇怪。NP完整性意味着任何NP问题都可以多项式化为正则表达式,因此可能只是从“平衡括号”语言到可被正则表达式识别的多项式多项式。但是同样,解析CFL可能会有一些荒谬的正则表达式,因为它们甚至可以解析非素一元数!

总的来说,教训可能是复杂性类和语言类不具有可比性。这也建议改写您的问题,引用Chomsky层次结构而不是“复杂性范围”(即使公平地说,我对此并不感到困惑)。

查尔斯·斯图尔特写道:

Aho,1990,“在字符串中查找模式的算法”表明,具有回溯功能的常规语言的隶属度问题是NP完整的。

可以在Google图书的第289页找到部分预览(至少是声明的一部分),并在此处找到对该论文的参考书目。请注意,在本文中,rewbr代表带有BackReferences的正则表达式。


3

PCRE是“正则表达式”的最流行的实现,它还实现了递归模式,这超出了反向引用。在Stackoverflow 上刚刚提出了有关其复杂性的问题。根据Perl大师brian d foy的“深入实践”的回答,这使PCRE像无上下文语法一样强大。但是,与Backus-Naur Form相比,该语法非常糟糕。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.