多年来,“正则表达式”模式匹配越来越强大,我想知道:它真的只是上下文敏感 - 语法匹配吗?它是无上下文语法匹配的变体/扩展吗?它现在在哪里,为什么我们不称之为旧的,限制性的“正则表达式”?
答案 0 :(得分:11)
特别是对捕获括号的反向引用使正则表达式比常规,无上下文或上下文敏感的语法更复杂。这个名字只是在历史上成长(尽可能多的单词)。另请参阅维基百科中的this section和来自Perl的此explanation with an example。
答案 1 :(得分:4)
我看待它的方式:
我知道正则表达式解析器,它允许你匹配解析器已经遇到的东西,实现类似上下文敏感语法的东西。
尽管如此,正则表达式解析器无论多么复杂,都不允许递归应用规则,这是无上下文语法的明确要求。
在我看来,术语 regex 主要是指用于表达那些常规语法(星号和问号)的语法。
答案 2 :(得分:3)
现代正则表达式实现中的一些功能违反了classic regular expression definition的规则。
例如Microsoft’s .NET Balancing Group (?<
name1
-
name2
> … )
:
^(?:0(?<L>)|1(?<-L>))*(?(L)(?!))$
此 匹配语言 L Ο1= {ε,01,0011,000111,...}。但根据Pumping Lemma,这种语言并不常见。