正则表达式通常被认为是不完善的语言的经典示例。例如,“正则表达式”作为这个 SO 问题的答案给出,寻找不是图灵完备的语言。
在我对转动完整性概念的理解中,这可能有点基本,这意味着不能使用正则表达式来检查“平衡”的模式。平衡的含义具有与结束字符相同数量的开始字符。这是因为这样做需要你有某种状态,以允许你匹配开始和结束字符。
然而,正则表达式的 .NET 实现引入了平衡组的概念。此构造旨在让您回溯并查看之前的组是否匹配。这意味着 .NET 正则表达式:
^(?<p>a)*(?<-p>b)*(?(p)(?!))$
可以匹配以下模式:
ab
aabb
aaabbb
aaaabbbb
... etc. ...
这是否意味着.NET 的正则表达式是图灵完备的?或者是否还有其他缺少的东西需要语言是图灵完备的?