Spickzettel
| Token | Passt auf |
|---|---|
| . | Jedes Zeichen außer Zeilenumbruch (mit dem s-Flag: jedes Zeichen) |
| \d \w \s | Ziffer; Wortzeichen [A-Za-z0-9_]; Leerraum. Großbuchstaben negieren: \D \W \S |
| [abc] [^abc] [a-z] | Zeichenklasse, negierte Klasse, Bereich |
| ^ $ | Anfang und Ende der Eingabe (jeder Zeile mit dem m-Flag) |
| \b | Wortgrenze |
| * + ? {n} {n,} {n,m} | 0 oder mehr, 1 oder mehr, 0 oder 1, genau n, n oder mehr, n bis m |
| *? +? ?? | Faule (kürzeste) Varianten |
| (abc) | Capture-Gruppe, ab 1 nummeriert |
| (?<name>abc) | Benannte Gruppe, referenziert als \k<name> und $<name> |
| (?:abc) | Gruppe ohne Capture |
| a|b | Alternative |
| (?=x) (?!x) (?<=x) (?<!x) | Lookahead, negativer Lookahead, Lookbehind, negativer Lookbehind |
| \1 | Rückverweis auf Gruppe 1 |
| \p{L} \p{Script=Cyrillic} | Unicode-Eigenschaft (braucht das u-Flag) |
Flags
g alle Treffer finden, nicht nur den ersten; i Groß-/Kleinschreibung ignorieren; m ^ und $ an Zeilenumbrüchen passen lassen; s . auch auf Zeilenumbrüche passen lassen; u Unicode-Modus (nötig für \p{…} und korrekte Behandlung von Emoji); y sticky, nur bei lastIndex passen.
Dialekte
Dieser Tester nutzt die JavaScript-Engine. Die Syntax oben teilt sie mit PCRE (PHP, nginx, HAProxy), Pythons re und Java für fast alles, was Sie schreiben werden; die Unterschiede liegen an den Rändern: Python benennt Gruppen (?P<name>…), Gos RE2 und grep -E haben weder Lookbehind noch Rückverweise, und POSIX-Klassen wie [[:digit:]] gibt es in JavaScript nicht. Atomare Gruppen und possessive Quantoren gibt es nur in PCRE und Java.
Häufige Muster
Fragen
Warum passt mein Muster nur einmal?
Ohne das g-Flag findet ein Regex nur den ersten Treffer. Fügen Sie g hinzu, um alle zu finden. Im Code nutzen Sie matchAll, re.findall oder preg_match_all für denselben Effekt.
Warum passt .* auf zu viel?
Quantoren sind gierig: .* nimmt so viel wie möglich und gibt nur nach, wenn der Rest scheitert. Nutzen Sie .*? für den kürzesten Treffer oder eine negierte Klasse wie [^"]*, die schneller und klarer ist.
Wie passe ich auf einen Punkt oder eine Klammer wörtlich?
Mit einem Backslash maskieren: \. \[ \( \\. Das String-Escape-Tool hat einen Regex-Modus, der ein ganzes Literal für Sie maskiert.
Was ist katastrophales Backtracking?
Verschachtelte Quantoren wie (a+)+ auf einer nicht passenden Eingabe lassen die Engine exponentiell viele Pfade probieren und hängen. Vermeiden Sie verschachtelte Quantoren über überlappenden Mengen, nutzen Sie possessive oder atomare Gruppen, wo die Engine sie hat, oder RE2 (Go, Rust regex), das lineare Zeit garantiert.