bitlvl
DE

Regex-Tester

Tippen Sie Muster und Flags, fügen Sie den zu durchsuchenden Text ein. Treffer leuchten beim Tippen auf, jede Gruppe wird aufgelistet, und das Muster wird Stück für Stück erklärt.

//

Treffer

Ersetzen

 

Erklärung

Die Ergebnisse und Meldungen dieses Tools werden auf Englisch angezeigt.

Spickzettel

TokenPasst auf
.Jedes Zeichen außer Zeilenumbruch (mit dem s-Flag: jedes Zeichen)
\d \w \sZiffer; 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)
\bWortgrenze
* + ? {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|bAlternative
(?=x) (?!x) (?<=x) (?<!x)Lookahead, negativer Lookahead, Lookbehind, negativer Lookbehind
\1Rü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

IPv4-Adresse (grob)
\b(?:\d{1,3}\.){3}\d{1,3}\b
E-Mail (praktisch)
[\w.+-]+@[\w-]+(?:\.[\w-]+)+
ISO-Datum
(?<y>\d{4})-(?<m>0[1-9]|1[0-2])-(?<d>0[1-9]|[12]\d|3[01])
Hex-Farbe
#(?:[0-9a-f]{3}){1,2}\b
Leerraum am Zeilenende entfernen
[ \t]+$ (Flags gm, durch nichts ersetzen)

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.