【发布时间】:2009-03-04 22:00:08
【问题描述】:
多年来,“正则表达式”模式匹配变得越来越强大,以至于我想知道:它真的只是上下文敏感的语法匹配吗?它是上下文无关语法匹配的变体/扩展吗?它现在在哪里,为什么我们不直接称它为旧的、限制性的“正则表达式”?
【问题讨论】:
标签: regex idioms context-free-grammar
多年来,“正则表达式”模式匹配变得越来越强大,以至于我想知道:它真的只是上下文敏感的语法匹配吗?它是上下文无关语法匹配的变体/扩展吗?它现在在哪里,为什么我们不直接称它为旧的、限制性的“正则表达式”?
【问题讨论】:
标签: regex idioms context-free-grammar
特别是对捕获括号的反向引用使正则表达式比常规、上下文无关或上下文相关的语法更复杂。这个名字只是历史上成长的(和很多词一样)。另请参阅 Wikipedia 中的 this section 和 Perl 中的 explanation with an example。
【讨论】:
regular language和regular expression之间的区别吗?
我的看法:
我确实知道正则表达式解析器,它允许您匹配解析器已经遇到的内容,从而实现上下文相关语法之类的东西。
尽管如此,正则表达式解析器,无论它们多么复杂,都不允许递归应用规则,这是上下文无关语法的明确要求。
在我看来,regex 一词主要是指用于表达那些常规语法(星号和问号)的语法。
【讨论】:
现代正则表达式实现中的某些功能打破了classic regular expression definition 的规则。
例如Microsoft’s .NET Balancing Group (?<name1-name2> … ):
^(?:0(?<L>)|1(?<-L>))*(?(L)(?!))$
这确实匹配语言L₀₁ = {ε, 01, 0011, 000111, ... }。但是根据Pumping Lemma,这种语言是不规则的。
【讨论】: