Ein regulärer Ausdruck (englisch regular expression, kurz Regex) beschreibt ein Textmuster. Statt nach einem festen Wort zu suchen, sagen Sie: „Finde fünf Ziffern hintereinander“ oder „Finde alles zwischen zwei Anführungszeichen“. Regex wird in fast allen Programmiersprachen, in Editoren wie VS Code, in Tabellenprogrammen wie Google Sheets, in Formularvalidierungen und auf der Kommandozeile mit grep oder sed verwendet. Die Syntax wirkt anfangs kryptisch, folgt aber wenigen Regeln.
Die Beispiele in diesem Ratgeber nutzen die verbreitete Syntax von JavaScript, Python und PCRE. Probieren Sie jedes Muster direkt im Regex-Tester aus.
Spickzettel: Zeichen und Zeichenklassen
| Muster | Bedeutung | Beispiel-Treffer |
|---|---|---|
abc |
genau diese Zeichenfolge | „abc“ |
. |
beliebiges Zeichen außer Zeilenumbruch | „a“, „7“, „-“ |
\d |
Ziffer 0–9 | „4“ |
\w |
Wortzeichen: A–Z, a–z, 0–9, _ | „x“, „_“ |
\s |
Leerraum (Leerzeichen, Tab, Umbruch) | „ “ |
\D, \W, \S |
jeweils das Gegenteil | |
[aeiou] |
eines der Zeichen | „e“ |
[^0-9] |
jedes Zeichen außer Ziffern | „x“ |
[A-Za-zÄÖÜäöüß] |
Buchstaben inklusive Umlaute | „ö“ |
\. |
ein echter Punkt (maskiert) | „.“ |
Umlaute: In JavaScript und vielen anderen Sprachen umfasst \w nur ASCII-Zeichen – „Müller“ wird an „ü“ getrennt. Nutzen Sie eine eigene Klasse wie oben oder Unicode-Eigenschaften: \p{L} (beliebiger Buchstabe) mit dem Flag u.
Quantoren: wie oft?
| Muster | Bedeutung |
|---|---|
a* |
null oder mehr |
a+ |
eins oder mehr |
a? |
null oder eins (optional) |
a{5} |
genau fünf |
a{2,4} |
zwei bis vier |
a{2,} |
mindestens zwei |
Anker und Grenzen
| Muster | Bedeutung |
|---|---|
^ |
Anfang des Textes (bzw. der Zeile mit Flag m) |
$ |
Ende des Textes (bzw. der Zeile) |
\b |
Wortgrenze |
Ohne Anker findet \d{5} auch fünf Ziffern mitten in „Kundennummer 1234567“. Für Validierungen gehören ^ und $ fast immer dazu.
Gruppen und Alternativen
| Muster | Bedeutung |
|---|---|
(abc) |
Gruppe, Inhalt wird gespeichert |
(?:abc) |
Gruppe ohne Speichern |
(?<jahr>\d{4}) |
benannte Gruppe |
a|b |
a oder b |
\1 |
Rückverweis auf Gruppe 1 |
Mit Gruppen können Sie beim Ersetzen umstellen. Beispiel: Deutsches Datum in ISO-Format wandeln.
Suchen: (\d{2})\.(\d{2})\.(\d{4})
Ersetzen: $3-$2-$1
07.10.2026 → 2026-10-07
(In Python heißt der Rückverweis \3-\2-\1.)
Flags
| Flag | Wirkung |
|---|---|
g |
alle Treffer finden, nicht nur den ersten |
i |
Groß- und Kleinschreibung ignorieren |
m |
^ und $ gelten pro Zeile |
s |
. passt auch auf Zeilenumbrüche |
u |
Unicode-Modus (für \p{L}, Emojis usw.) |
Praktische Beispiele
Postleitzahl Deutschland (5 Ziffern), Österreich/Schweiz (4 Ziffern):
^\d{5}$
^\d{4}$
Deutsche Telefonnummer, grob (optional +49 oder 0, dann Ziffern mit Leerzeichen, Bindestrich oder Schrägstrich):
^(?:\+49|0)[1-9][\d \-\/]{5,14}$
Passt auf „+49 30 1234567“, „030/1234567“ und „0171-1234567“. Telefonnummern sind sehr vielfältig; für eine vollständige Prüfung nutzen Programmierer Bibliotheken wie libphonenumber.
Datum TT.MM.JJJJ:
^(0[1-9]|[12]\d|3[01])\.(0[1-9]|1[0-2])\.\d{4}$
Das Muster schließt „32.13.2026“ aus, erkennt aber nicht, dass es keinen 31. April gibt. Solche Logik gehört in den Code, nicht in die Regex.
E-Mail-Adresse, pragmatisch:
^[^\s@]+@[^\s@]+\.[^\s@]{2,}$
Fängt fehlende @-Zeichen und Leerzeichen ab, ohne gültige Adressen mit Plus-Zeichen oder Umlaut-Domains zu blockieren.
Deutsche IBAN (Format, ohne Prüfziffer):
^DE\d{2}\s?(?:\d{4}\s?){4}\d{2}$
Ob die Prüfziffer stimmt, zeigt der IBAN-Prüfer; wie das Verfahren funktioniert, erklärt der Ratgeber IBAN: Aufbau und Prüfung.
Gierig oder genügsam
Quantoren sind standardmäßig gierig: Sie nehmen so viel Text wie möglich.
Text: <b>Preis</b> und <b>Menge</b>
<b>.*</b> → <b>Preis</b> und <b>Menge</b> (alles)
<b>.*?</b> → <b>Preis</b> (nur bis zum ersten Ende)
Das Fragezeichen nach dem Quantor macht ihn genügsam (lazy). Alternativ ist eine negierte Klasse oft präziser und schneller: <b>[^<]*</b>.
Typische Fallstricke
- Punkt nicht maskiert:
www.example.depasst auch auf „wwwXexampleYde“. Richtig:www\.example\.de. - Anker vergessen: Validierung ohne
^…$akzeptiert Müll vor und nach dem Treffer. - HTML mit Regex parsen: Für einfache Suchen okay, für verschachtelte Strukturen einen echten Parser verwenden.
- Katastrophales Backtracking: Verschachtelte Quantoren wie
(a+)+$können bei bestimmten Eingaben extrem lange rechnen. Bei Benutzereingaben auf Servern ist das ein Sicherheitsrisiko (ReDoS). - Unterschiedliche Dialekte: Lookbehind, benannte Gruppen oder
\p{}werden nicht überall gleich unterstützt. Testen Sie in der Zielumgebung.
Regex kommt oft zusammen mit strukturierten Daten zum Einsatz, etwa bei der Prüfung von Feldern in JSON; siehe JSON Grundlagen.
Regex in Werkzeugen des Alltags
Reguläre Ausdrücke funktionieren nicht nur im Code:
- VS Code, Notepad++, Sublime: Im Suchen-und-Ersetzen-Dialog das Symbol
.*aktivieren. Gruppen werden mit$1eingefügt. - Google Sheets: Die Funktionen
REGEXMATCH,REGEXEXTRACTundREGEXREPLACEprüfen, extrahieren und ersetzen in Zellen, z. B.=REGEXEXTRACT(A2; "\d{5}")für eine Postleitzahl. - Excel: Neuere Versionen von Microsoft 365 bieten Funktionen wie
REGEXTESTundREGEXEXTRACT; ältere Versionen benötigen Power Query oder Makros. - Kommandozeile:
grep -E '^[0-9]{5}$' plz.txtfiltert Zeilen,sed -E 's/([0-9]+)/[\1]/'ersetzt (\dkennt sed nicht). - HTML-Formulare: Das Attribut
pattern="\d{5}"prüft Eingaben bereits im Browser, ersetzt aber nie die Prüfung auf dem Server.
Checkliste
- Muster mit
^und$verankern, wenn ganze Eingaben geprüft werden. - Sonderzeichen wie
. + ? ( ) [ ] { } \ | ^ $bei Bedarf maskieren. - Umlaute bewusst behandeln (
\p{L}mitu). - Gierige Quantoren durch
?oder negierte Klassen zähmen. - Muster mit echten Beispielen im Regex-Tester prüfen, auch mit Gegenbeispielen.