2015-04-23 14 views
12

È possibile 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?Corrispondenza a^n b^n c^n (ad esempio "aaabbbccc") utilizzando le espressioni regolari in C#

Come procederesti a creare un'espressione regolare che controlla le stringhe che corrispondono a^n b^n c^n?

i seguenti casi devono corrispondere:

abc 
aabbcc 
aaabbbccc 

I seguenti casi non devono corrispondere:

abbc 
aabbc 
aabbbccc 
+1

È noto? O è un numero qualsiasi purché il numero sia lo stesso per tutte le lettere? – Robbert

+0

@Robbert suona come il secondo – RaGe

+0

correlati: [Acquisizione di quantificatori e quantificatori aritmetici] (http://stackoverflow.com/questions/23001137/capturing-quantifiers-and-quantifier-arithmetic) – HamZa

risposta

13

NET fornisce balancing groups che si dovrebbe essere in grado di utilizzare per fare questo; qualcosa come:

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

Incremento n e o per ogni a, decrementare n per ogni b e poi o per ogni c, quindi sicuro della partita ((?!)) se uno contatore è ancora maggiore di zero.

+0

Non pensavo che sarebbe stato possibile fare una cosa del genere! – Matthew

+0

Fantastico! Ha funzionato! – LeBron23

+0

@minitech - Congratulazioni per aver raggiunto la reputazione di 100K! – Kobi

Problemi correlati