Merkblatt Regular Expressions
Man will nur schnell eine kurze RegEx schreiben, aber was rauskommt ist eine einzige Fehlermeldung. Welche Zeichen müssen nochmal escaped werden? Welches Zeichen steht in einem String für einen Tabulator oder Zeilenumbruch? Kann ich mehrere Zeilen gleichzeitig validieren? Um nicht jedes mal googlen zu müssen, habe ich in diesem Artikel einen Merkzettel versteckt. Die Syntax […]
Man will nur schnell eine kurze RegEx schreiben, aber was rauskommt ist eine einzige Fehlermeldung. Welche Zeichen müssen nochmal escaped werden? Welches Zeichen steht in einem String für einen Tabulator oder Zeilenumbruch? Kann ich mehrere Zeilen gleichzeitig validieren? Um nicht jedes mal googlen zu müssen, habe ich in diesem Artikel einen Merkzettel versteckt.
Die Syntax der Regular Expressions
Wichtige Regeln
Eine RegEx muss am Anfang und am Ende identische Zeichen enthalten. Dies kann jedes Zeichen sein außer den alphanumerischen Zeichen und dem Backslash (), da dieses für das escapen verwendet wird.
Standardzeichen sind / oder %
Vordefinierte Zeichenklassen
[a-z] | Alle Kleinbuchstaben |
[A-Z] | Alle Großbuchstaben |
[0-9] oder \d | Alle Ziffern |
[a-zA-Z0-9_] oder \w | Alle Buchstaben, Ziffern und der Unterstrich |
[\r\n\t\f] oder \s | Wagenrücklauf, New Line, Tabulator, Seitenwechsel (Steuerzeichen) |
. (Punkt) | Alle Zeichen außer n |
\b | Wortgrenze d.h. ein Tab oder ein Leerzeichen o.Ä. |
Operatoren
^ | Wenn als erstes Zeichen der RegEx eingesetzt, dann muss der zu überprüfende String mit der Regel beginnen. |
$ | Wenn als letztes Zeichen der RegEx eingesetzt, dann muss der zu überprüfende String mit der Regel enden. |
[] | Einer der in den Klammern enthaltenen Buchstaben muss an dieser Stelle stehen. |
() | Gruppiert und selektiert: Alle in den Klammern enthaltenen Buchstaben müssen in der angegebenen Reihenfolge vorkommen. Die Selektion kann anschließend als Gruppierung behandelt werden. Die jeweiligen Selektionen können im Anschluss ausgegeben werden.Beispiel: Erste Klammer kann per $1 ausgegeben werden (2. Klammer über $2 usw…) |
(?: ) | Gruppiert (siehe oben) jedoch ohne Selektion: Die Inhalte sind nicht mehr im Anschluss über die Variablen zugreifbar. |
(?= ) | Ausdruck: “Muss gefolgt werden von” Die Zeichenkette vor der Klammer muss gefolgt werden von der Zeichenkette in der Klammer. Die Zeichenkette in der Klammer wird aber nicht in das Ergebnis geschrieben. |
(?! ) | Ausdruck: “Darf nicht gefolgt werden von” Die Zeichenkette vor der Klammer darf nicht von der Zeichenkette in der Klammer gefolgt werden. Die Zeichenkette in der Klammer wird nicht in das Ergebnis geschrieben. |
Inversion von Zeichenklassen
\d = nur Ziffern
\D = alle Zeichen bis auf Ziffern
Oder mit Zirkumflex: [^0-9]
Zeichen die mit (Backslash) escaped werden müssen
( ) { } [ ] \ | / + ? * . ^ & -
Anzahl der Zeichen festlegen
x+ | Das Zeichen x muss min. einmal vorkommen. Kann beliebig oft vorhanden sein => x{1,} |
x* | Das Zeichen x kann beliebig oft vorkommen, also auch gar nicht => x{0,} |
x? | Das Zeichen x kann, muss aber nicht auftreten => x{0,1} |
x{m} | Das Zeichen x muss genau m mal auftreten |
x{m,} | Das Zeichen x muss min. m mal auftreten. Kann unendlich oft vorhanden sein. |
x{,n} | Das Zeichen x darf höchstens n mal auftreten. |
x{m,n} | Das Zeichen x zwischen m und n mal auftreten. |
Die Modifier
werden hinter die Regular Expression geschrieben. ( Bsp: /^Test$/i )
i | Mit diesem Modifier wird nicht mehr auf die Groß/Kleinschreibung geachtet. |
g | Mit diesem Modifier werden alle Matches geliefert und nicht nur das erste |
m | Mit diesem Modifier werden Zeilenbrüche als Start und Ende für die Operatoren ^ und $ gewertet. Bsp: /.$/m Hier muss am Ende jeder Zeile ein . (Punkt) vorhanden sein. |
s | Dieser Modifier bewirkt, dass alle Zeichen (auch Zeilenumbrüche) dem . (Punkt) entsprechen. |
Beispiele
/^test\d?/i | Die zu überprüfende Zeichenkette darf nur mit test bzw. test1 – test9 beginnen, wobei nicht auf Groß und Kleinschreibung geachtet wird. |
/^[\w-.]+@[\w-]+.[a-z]{2,}$/i | Eine einfache Email-Validierung. Am Anfang dürfen beliebig viele Buchstaben, Zahlen, Punkte, Unterstriche und Bindestriche stehen. Dann muss ein @ folgen und danach wieder beliebig viele Buchstaben, Zahlen, Unterstriche und Bindestriche. Hiernach wird ein Punkt erwartet und dann 2-4 Groß- oder Kleinbuchstaben für die Topleveldomain. |
Das Helferlein
Natürlich gibt es auch ein paar Helferlein. Da ich aber meine Regular Expressions meistens mit Trial and Error validiere, habe ich nur ein Tool, dass ich hierfür gerne mal zur Hilfe ziehe.
Das Tool hat eine Eingabe für die RegEx und ein Textfeld, in dem der Text steht, der validiert werden soll. Hier sieht man wegen der verschiedenen Farbhervorhebungen immer sehr schnell wo noch etwas geändert werden muss.
Zu finden ist dieses Tool unter: http://regexpal.com/