2015-04-23 15 views
12

Możesz łatwo użyć wyrażenia regularnego, aby zweryfikować zwykły język. Moje pytanie brzmi: czy możesz go użyć do weryfikacji języka kontekstowego? Jak potężny jest współczesny regex w hierarchii?Dopasowywanie^n b^n c^n (na przykład "aaabbbccc") za pomocą wyrażeń regularnych w języku C#

W jaki sposób chciałbyś utworzyć wyrażenie, które sprawdza ciągi pasujące do^n b^n c^n?

następujące przypadki powinny odpowiadać:

abc 
aabbcc 
aaabbbccc 

Następujące przypadki nie powinny pasować:

abbc 
aabbc 
aabbbccc 
+1

Czy n wiadomo? Czy jest to jakaś liczba, o ile numer jest taki sam dla wszystkich liter? – Robbert

+0

@Robbert brzmi jak ten ostatni – RaGe

+0

Powiązane: [Przechwytywanie kwantyfikatorów i arytmetyka kwantyfikatorów] (http://stackoverflow.com/questions/23001137/capturing-quantifiers-and-quantifier-arithmetic) – HamZa

Odpowiedz

13

NET zapewnia balancing groups że powinieneś być w stanie korzystać z tego robić; coś takiego:

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

Przyrost n i o dla każdego a, zmniejszyć n dla każdego b a następnie o dla każdego c, to nie mecz ((?!)) albo jeśli licznik jest nadal większa niż zero.

+0

Nie sądziłem, że byłoby to możliwe! – Matthew

+0

Fantastyczne! Zadziałało! – LeBron23

+0

@minitech - Gratulujemy osiągnięcia reputacji 100K! – Kobi

Powiązane problemy