Wie kann ich in einem regulären Ausdruck darstellen epsilon?
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?
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.