正規表現は、完全ではない言語の古典的な例としてしばしば指摘されます。たとえば、チューリング完全ではない言語を探すこのSOの質問に対する答えとして、「正規表現」が示されています。
ターニングの完全性の概念についての私の、おそらくある程度基本的な理解では、これは、「バランスの取れた」パターンをチェックするために正規表現を使用できないことを意味します。バランスの取れた意味には、終了文字と同じ数の開始文字があります。これを行うには、開始文字と終了文字を一致させるために、何らかの状態が必要になるためです。
ただし、正規表現の.NET実装では、バランスの取れたグループの概念が導入されています。この構成は、前のグループが一致したかどうかをさかのぼって確認できるように設計されています。これは、.NET正規表現が次のことを意味します。
^(?<p>a)*(?<-p>b)*(?(p)(?!))$
次のようなパターンに一致する可能性があります。
ab
aabb
aaabbb
aaaabbbb
... etc. ...
これは、.NETの正規表現がチューリング完全であることを意味しますか?または、言語をチューリング完全にするために必要な、不足している他のものはありますか?