Frage

Der Text Buch lehrt uns, reguläre Ausdrücke zu schreiben, das epsilon (ε) Symbol verwenden, aber wie kann ich Code dieses Symbol direkt übersetzen, ohne vollständig zu meinem regulären Ausdruck überarbeitet?

Zum Beispiel: Wie kann ich dieses Regex schreiben, die alle Klein Strings fangen würde, dass entweder beginnen oder enden in a (oder beides).

Nicht 100% sicher, dass dies korrekt ist, aber ...

((a | epsilon) [a-z] *a) | (A [a-z] * (a | epsilon))

So einige Zeichenfolgen, die enthalten übereinstimmen sollte:

a //single "a" starts or ends with "a"

aa //starts and ends with "a"

ab //starts with "a"

ba //ends with "a"

aba //starts and ends with "a"

aaaaaaaa //starts and ends with "a"

abbbbbbb //starts with "a"

bbbbbbba //ends with "a"

abbbbbba //starts and ends with "a"

asdfhgdu //starts with "a"

onoineca //ends with "a"

ahnrtyna //starts and ends with "a"

ich nur das, was der Austausch von epsilon für das richtige Symbol, ich will keinen Teil des Restes des Ausdrucks ändern. Auch ich will klar sein, ich bin nicht wirklich für das Epsilon-Symbol überprüft, möchte ich die Wahl eines Charakters oder nichts haben (auch nicht nichts ... epsilon).

Ist ein solches Symbol exist?

Ist das, was ich möglich wollen?

War es hilfreich?

Lösung

Just lassen Sie die e, da sie die leere Zeichenkette bedeutet:

([1-9]|)[0-9]*

Es gibt auch eine Abkürzung für diesen speziellen Fall:

([1-9]?)[0-9]*

Die ? Mittel null oder ein Vorkommen des vorhergehenden Tokens.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top