Was sind reguläre Ausdrücke?
Reguläre Ausdrücke (Regular Expressions, Regex) sind Suchmuster für Text. Sie ermöglichen komplexe Such- und Ersetzungsoperationen mit wenig Code. Regex wird in fast allen Programmiersprachen unterstützt.
Grundlegende Zeichen
.– Beliebiges Zeichen (außer Zeilenumbruch)*– 0 oder mehr Wiederholungen+– 1 oder mehr Wiederholungen?– 0 oder 1 Wiederholung (optional)^– Anfang der Zeile/des Strings$– Ende der Zeile/des Strings\– Escape-Zeichen
Zeichenklassen
[abc]– a, b oder c[^abc]– Nicht a, b oder c[a-z]– Kleinbuchstabe a-z[A-Z]– Großbuchstabe A-Z[0-9]– Ziffer 0-9\d– Ziffer (= [0-9])\w– Wortzeichen (= [a-zA-Z0-9_])\s– Whitespace (Leerzeichen, Tab, etc.)
Quantifizierer
{n}– Genau n Wiederholungen{n,}– Mindestens n Wiederholungen{n,m}– Zwischen n und m Wiederholungen*?– Non-greedy * (so wenig wie möglich)+?– Non-greedy +
Gruppen und Alternativen
(abc)– Gruppe (Capturing Group)(?:abc)– Non-Capturing Groupa|b– a oder b (Alternative)\1– Rückreferenz auf erste Gruppe
Häufige Regex-Muster
E-Mail: [a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}
URL: https?://[\w.-]+(?:/[\w./-]*)?
Telefon DE: (\+49|0)[1-9][0-9]{1,14}
PLZ DE: \d{5}
Datum: \d{2}\.\d{2}\.\d{4}
IP-Adresse: \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}
Hex-Farbe: #[0-9A-Fa-f]{6}Flags (Modifikatoren)
g– Global: alle Treffer findeni– Case-insensitive: Groß-/Klein ignorierenm– Multiline: ^ und $ auch bei Zeilenumbrüchens– Dotall: . matcht auch Zeilenumbruchu– Unicode-Unterstützung
Häufig gestellte Fragen
Warum matcht mein Regex nicht?
Häufige Fehler: Sonderzeichen nicht escaped (. statt \.), falscher Quantifizierer, fehlendes g-Flag für mehrere Treffer, oder greedy vs. non-greedy Probleme.
Was ist der Unterschied zwischen * und +?
* matcht 0 oder mehr Zeichen, + matcht1 oder mehr. Bei a* ist auch ein leerer String gültig, bei a+ muss mindestens ein „a" vorkommen.
Was bedeutet greedy vs. non-greedy?
Greedy (.*) matcht so viel wie möglich. Non-greedy (.*?) matcht so wenig wie möglich. Bei <tag>text</tag> matcht <.*> alles, <.*?> nur <tag>.