Соответствие a ^ n b ^ n c ^ n (например, "aaabbbccc" ) с использованием регулярных выражений в С#

Вы можете легко использовать регулярное выражение для проверки правильного языка. Мой вопрос: можете ли вы использовать его для проверки контекстно-зависимого языка? Насколько сильным является современное регулярное выражение в иерархии?

Как вы собираетесь создавать регулярное выражение, которое проверяет строки, которые соответствуют ^ n b ^ n c ^ n?

Следующие случаи должны соответствовать:

abc
aabbcc
aaabbbccc

Следующие случаи не должны совпадать:

abbc
aabbc
aabbbccc

Ответы

Ответ 1

.NET предоставляет балансировочные группы, которые вы должны использовать для этого; что-то вроде:

^(?<n>(?<o>a))*(?<-n>b)*(?<-o>c)*(?(n)(?!))(?(o)(?!))$

Приращение n и o для каждого a, декремент n для каждого b, а затем o для каждого c, затем не получим соответствия ((?!)), если любой счетчик еще больше нуля.