bitlvl
DE

Regex-Spickzettel

Die Syntax, die jede gängige Engine teilt, mit den Unterschieden in einer Tabelle am Ende.

Passt auf eine A4-/Letter-Seite im Hochformat; mit „Als PDF speichern“ im Druckdialog behalten Sie eine Kopie.

Anker und Grenzen

^ $Anfang / Ende des Textes (der Zeile mit m-Flag)
\A \z \ZAnfang / Ende des Textes unabhängig von Flags (nicht in JS)
\b \BWortgrenze / keine

Zeichen

.jedes Zeichen außer Zeilenumbruch (jedes mit s-Flag)
\d \w \sZiffer, Wortzeichen, Leerraum; \D \W \S negieren
[abc] [a-z] [^abc]Menge, Bereich, negierte Menge
[\]\\^-]in einer Menge brauchen nur ] \ ^ - ein Escape
\t \n \r \xHH \uHHHHTab, Zeilenumbruch, CR, Hex, Unicode
\p{L} \p{Lu} \p{N} \p{Script=Cyrillic}Unicode-Eigenschaften (u-Flag in JS)
[[:alpha:]] [[:digit:]]POSIX-Klassen (grep, PCRE; nicht JS)
\. \* \( \\maskiertes Metazeichen = Literal

Quantoren

* + ?0+, 1+, 0 oder 1
{n} {n,} {n,m}genau, mindestens, zwischen
*? +? ?? {n,m}?faul: so wenig wie möglich
*+ ++ ?+possessiv: kein Backtracking (PCRE, Java)

Gruppen

(abc)Capture, ab 1 nummeriert
(?:abc)ohne Capture
(?<name>abc)benannt (Python: (?P<name>…))
\1 \k<name>Rückverweis (Python: (?P=name))
a|bAlternative (niedrigster Vorrang)
(?>abc)atomare Gruppe (PCRE, Java)
(?i)abc (?i:abc)Inline-Flag, Inline-Flag mit Geltungsbereich

Lookaround (nullbreit)

(?=x)gefolgt von x
(?!x)nicht gefolgt von x
(?<=x)mit x davor
(?<!x)ohne x davor

Flags

galle Treffer (JS, PHP über Funktion)
iGroß-/Kleinschreibung ignorieren
m^ $ passen an Zeilenumbrüchen
s. passt auf Zeilenumbruch (DOTALL)
xLeerraum und #-Kommentare im Muster ignorieren (PCRE, Python; nicht JS)
uUnicode (JS); nötig für \p{}
ysticky (JS)

Ersetzung

$1 $<name> $&JS, .NET: Gruppe, benannt, ganzer Treffer
\1 \g<name>Python re.sub
$1 \1 ${name}PCRE / PHP preg_replace; Go nutzt $1 und ${name}
sed 's/(a)(b)/\2\1/'sed -E (einfaches sed braucht \( \))

Häufige Muster

^\s*$Leerzeile
\s+$Leerraum am Zeilenende
\b(?:\d{1,3}\.){3}\d{1,3}\bIPv4 (grob)
[\w.+-]+@[\w-]+(?:\.[\w-]+)+E-Mail (praktisch)
https?://[^\s"'<>]+URL
\d{4}-\d{2}-\d{2}ISO-Datum
#(?:[0-9a-fA-F]{3}){1,2}\bHex-Farbe
"(?:[^"\\]|\\.)*"String in doppelten Anführungszeichen mit Escapes
^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}$Passwort mit Ziffer, Klein-, Großbuchstabe, 8+
(\w+)\s+\1wiederholtes Wort

Dialektunterschiede

JavaScriptkein \A \z, kein x-Flag, nicht possessiv/atomar; Lookbehind ja; benannte Gruppen (?<n>)
PCRE (PHP, nginx, HAProxy)alles; Begrenzer /…/ in PHP
Python re(?P<n>), nicht possessiv vor 3.11, \Z = Ende
Go RE2, Rust regexlineare Zeit; kein Lookaround, keine Rückverweise
grep -E / sed -EERE: kein \d ([0-9] nutzen), POSIX-Klassen, keine faulen Quantoren
grep (basic)\( \) \{ \} \+ \? maskiert, um besonders zu sein
Javapossessiv, atomar; Strings brauchen doppelte Backslashes

Die Ergebnisse und Meldungen dieses Tools werden auf Englisch angezeigt.

Fragen

Wo kann ich ein Muster testen?

Der Regex-Tester hebt Treffer live hervor, listet Gruppen, zeigt eine Ersetzungsvorschau und erklärt das Muster Token für Token.