2013-08-04 12 views
6

Mam pytanie, które nie wiem jak zrobić. Musi pasować do wszystkich ciągów składających się z dowolnej liczby a na początku, a następnie do pojedynczego 0, jeśli liczba a była równa lub pojedyncza 1, jeśli liczba a była nieparzysta.Regex Nieparzysta/parzysta kwota

Jak możesz śledzić parzyste/nieparzyste?

Próbka

  • AAA1
  • aaaa0
+2

Czy próbowałeś czegoś? –

+0

Wklej kilka przykładowych ciągów. –

Odpowiedz

10

^(a(aa)*1|(aa)+0)$

lub

^(?:a(?:aa)*1|(?:aa)+0)$ jeśli używasz przechwytujących.

Pierwsza część: a(aa)*1 dopasuje dowolną nieparzystą liczbę a, a następnie jedną, a druga część: (aa)+0 dopasuje dowolną parzystą liczbę a, a następnie liczbę zero.

Nie można śledzić liczby dopasowań komponentu wzorca w wyrażeniach regularnych. Nie mają pamięci. Na szczęście w tym przypadku można obejść to ograniczenie.

+0

Dzięki za odpowiedź, czy możesz wyjaśnić?:, Wiem o tym? oznacza 0 lub 1, ale co oznaczają razem? –

+0

(?: Pattern) to nie przechwytujący odpowiednik (pattern) w Javie. Jeśli nie sprawdzasz grup w matcher, oba te wzory są równoważne. W tym kontekście NIE oznacza to 0 ani 1. http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html –

7

Można użyć:

^(?:aa)*(?:a1|0)$