Соответствие 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
, затем не получим соответствия ((?!)
), если любой счетчик еще больше нуля.