2013-08-04 15 views
6

Ich habe eine Regex-Frage, die ich nicht weiß, wie zu tun ist. Es muss mit allen Strings übereinstimmen, die am Anfang eine beliebige Anzahl von Einsen enthalten, und dann entweder eine einzelne 0, wenn die Zahl eins gerade war, oder eine einzelne 1, wenn die Anzahl von Einsen ungerade war.Regex ungerade/gerade Betrag

Wie können Sie gerade/ungerade im Auge behalten?

Probe

  • aaa1
  • aaaa0
+2

Haben Sie etwas versucht? –

+0

Fügen Sie einige Beispielzeichenfolgen ein. –

Antwort

10

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

oder

^(?:a(?:aa)*1|(?:aa)+0)$ Wenn Sie Captures verwenden.

Der erste Teil: a(aa)*1 wird mit jeder ungeraden Zahl von a's gefolgt von einer Eins übereinstimmen, und der zweite Teil: (aa)+0 wird mit jeder geraden Zahl von a gefolgt von einer Null übereinstimmen.

Sie können die Anzahl der Übereinstimmungen einer Komponente des Musters in regulären Ausdrücken nicht verfolgen. Sie haben keine Erinnerung. Zum Glück können Sie in diesem Fall diese Einschränkung umgehen.

+0

Danke für die Antwort, können Sie erklären?:, Ich weiß das? bedeutet 0 oder 1, aber was bedeuten sie zusammen? –

+0

(?: Pattern) ist nur das nicht erfassende Äquivalent von (pattern) in Java. Wenn Sie keine Gruppen im Matcher überprüfen, sind diese beiden Muster gleichwertig. In diesem Zusammenhang bedeutet es NICHT 0 oder 1. http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html –

7

könnten Sie verwenden:

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