Corrispondenza a ^ nb ^ nc ^ n (ad esempio “aaabbbccc”) utilizzando le espressioni regolari in C #

È ansible utilizzare facilmente regex per verificare una lingua normale. La mia domanda è puoi usarla per verificare un linguaggio sensibile al contesto? Quanto è potente la regex moderna nella gerarchia?

Come procederesti a creare un’espressione regolare che controlla le stringhe che corrispondono a ^ nb ^ nc ^ n?

I seguenti casi devono corrispondere:

abc aabbcc aaabbbccc 

I seguenti casi non dovrebbero corrispondere:

 abbc aabbc aabbbccc 

.NET fornisce gruppi di bilanciamento che dovresti essere in grado di usare per fare questo; qualcosa di simile a:

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

Incrementa n e o per ogni a , decremento n per ogni b e poi o per ogni c , quindi fallisci la corrispondenza ( (?!) ) Se uno dei due counter è ancora maggiore di zero.