Reguläre Ausdrücke haben den Ruf, wie zufälliges Rauschen auszusehen. Ein Muster wie ^[\w.-]+@[\w-]+\.\w{2,}$ kann wirken, als wäre eine Katze über die Tastatur gelaufen. Doch hinter der kryptischen Syntax verbirgt sich eine bemerkenswert elegante Idee: eine kompakte Sprache zur Beschreibung von Mustern in Texten.
Ob Sie Formulareingaben validieren, Log-Dateien durchsuchen, Daten bereinigen oder Suchen-und-Ersetzen über eine gesamte Codebasis ausführen — Regex ist eines der vielseitigsten Werkzeuge im Toolkit eines Entwicklers. Und Sie müssen nicht jede obskure Funktion auswendig lernen, um echten Nutzen daraus zu ziehen. Eine Handvoll Bausteine deckt die große Mehrheit der praktischen Anwendungsfälle ab.
Was Regex eigentlich macht
Ein regulärer Ausdruck (Regex oder Regexp) ist ein Muster, das eine Menge von Zeichenketten beschreibt. Sie übergeben es einer Suchmaschine — in Ihrer Programmiersprache, Ihrem Texteditor oder Kommandozeilen-Tool — und es findet jede passende Zeichenkette.
Stellen Sie es sich als erweiterte Suchabfrage vor:
- Normale Suche: finde das exakte Wort „error"
- Regex-Suche: finde alles, das wie eine IP-Adresse, ein Datum, eine E-Mail-Adresse oder jede andere beschreibbare Struktur aussieht
Regex wurde 1956 vom Mathematiker Stephen Kleene erfunden und fand über Unix-Texteditoren in den 1960er Jahren Einzug in die Informatik. Heute wird es in praktisch jeder Programmiersprache und jedem Texteditor unterstützt.
Die Bausteine
Literale Zeichen
Der einfachste Regex ist reiner Text. Das Muster hello findet die Zeichenkette „hello" überall dort, wo sie vorkommt. Nichts Besonderes.
Der Punkt (.) — beliebiges Zeichen
Ein Punkt steht für ein beliebiges einzelnes Zeichen außer einem Zeilenumbruch.
h.tpasst auf „hat", „hit", „hot", „h3t" und sogar „h t"
Zeichenklassen ([])
Eckige Klammern definieren eine Menge erlaubter Zeichen an einer Position.
[aeiou]— ein beliebiger Vokal[0-9]— eine beliebige Ziffer[A-Za-z]— ein beliebiger Buchstabe[^0-9]— jedes Zeichen, das KEINE Ziffer ist (das^innerhalb der Klammern bedeutet „nicht")
Kurzschreibweisen
| Kurzform | Bedeutung | Entsprechung |
|---|---|---|
\d |
Beliebige Ziffer | [0-9] |
\w |
Wortzeichen | [A-Za-z0-9_] |
\s |
Leerzeichen | [ \t\n\r] |
\D |
Keine Ziffer | [^0-9] |
\W |
Kein Wortzeichen | [^A-Za-z0-9_] |
\S |
Kein Leerzeichen | [^ \t\n\r] |
Quantifizierer — wie oft
Quantifizierer steuern, wie oft das vorangehende Element vorkommen muss.
| Symbol | Bedeutung | Beispiel | Passt auf |
|---|---|---|---|
* |
Null oder mehr | ab*c |
„ac", „abc", „abbc" |
+ |
Ein oder mehr | ab+c |
„abc", „abbc" (nicht „ac") |
? |
Null oder ein | colou?r |
„color" und „colour" |
{3} |
Genau 3 | \d{3} |
„123", „456" |
{2,4} |
Zwischen 2 und 4 | \d{2,4} |
„12", „123", „1234" |
Anker — Position
^— Anfang der Zeichenkette (oder Zeile mit demm-Flag)$— Ende der Zeichenkette (oder Zeile)\b— Wortgrenze
Das Muster ^\d{4}$ passt auf eine Zeichenkette, die genau vier Ziffern enthält, wie „2026", aber nicht auf „abc2026" oder „2026xyz".
Gruppen und Alternation
(abc)— erfasst „abc" als Gruppea|b— passt auf „a" oder „b"(cat|dog)— passt auf „cat" oder „dog"
Gruppen erlauben auch die Anwendung von Quantifizierern auf Sequenzen: (ha)+ passt auf „ha", „haha", „hahaha".
Häufige praktische Muster
E-Mail validieren (einfach)
^[\w.-]+@[\w-]+\.\w{2,}$
Dies passt auf user@example.com, first.last@company.co.uk (teilweise) und lehnt Zeichenketten ohne @ oder Domain ab.
Wichtig: Die perfekte Validierung von E-Mail-Adressen mit Regex ist notorisch schwierig — die vollständige RFC-5322-Spezifikation ist extrem komplex. Für Produktionssysteme verwenden Sie einen einfachen Regex für die Formatprüfung und verifizieren die Adresse dann durch Senden einer Bestätigungs-E-Mail.
Telefonnummer erkennen
\+?\d{1,3}[-.\s]?\(?\d{1,4}\)?[-.\s]?\d{3,4}[-.\s]?\d{3,4}
Dies erkennt Formate wie +1 555 123 4567, 555-123-4567 und (555) 123-4567.
URL erkennen
https?://[\w.-]+(/[\w./?&=-]*)?
Passt auf https://example.com, http://example.com/path?q=hello.
Datum erkennen (YYYY-MM-DD)
\d{4}-\d{2}-\d{2}
Passt auf 2026-03-29, 1999-12-31. Hinweis: Dies prüft nur das Format, nicht die Gültigkeit — es würde auch 9999-99-99 erkennen.
Flags, die das Verhalten ändern
Die meisten Regex-Engines unterstützen Flags, die die Anwendung des Musters modifizieren:
| Flag | Name | Wirkung |
|---|---|---|
g |
Global | Alle Treffer finden, nicht nur den ersten |
i |
Groß-/Kleinschreibung ignorieren | hello passt auf „Hello", „HELLO" usw. |
m |
Mehrzeilig | ^ und $ passen auf Anfang/Ende jeder Zeile |
s |
Dotall | . passt auch auf Zeilenumbruch-Zeichen |
In JavaScript werden Flags nach dem schließenden Schrägstrich angehängt: /hello/gi. In Python werden sie als Argumente übergeben: re.findall(r"hello", text, re.IGNORECASE).
Wann Regex übertrieben ist
Regex ist mächtig, aber nicht immer das richtige Werkzeug:
- HTML oder XML parsen. Verwenden Sie einen richtigen DOM-Parser. Regex kann verschachtelte Tags nicht zuverlässig verarbeiten.
- JSON parsen. Verwenden Sie
JSON.parse()oder Äquivalent. Regex scheitert an Sonderfällen. - Komplexe Validierung. Wenn Ihr Muster über mehrere Zeilen geht und fünf Minuten zum Lesen braucht, schreiben Sie besser prozeduralen Validierungscode.
- Einfache String-Operationen. Wenn Sie nur
startsWith(),includes()odersplit()brauchen, sind einfache String-Methoden klarer und schneller.
Häufige Stolperfallen
- Vergessene Escape-Zeichen. Der Punkt
.passt auf jedes Zeichen. Um einen literalen Punkt zu finden, verwenden Sie\.. Ebenso für(,),[,],+,*,?,{,},^,$,|und\. - Gierig vs. sparsam. Standardmäßig ist
.*gierig — es erfasst so viel wie möglich. Fügen Sie?hinzu, um es sparsam zu machen:.*?erfasst so wenig wie möglich. Das ist wichtig beim Extrahieren von Inhalten zwischen Trennzeichen. - Katastrophales Backtracking. Verschachtelte Quantifizierer wie
(a+)+können die Engine dazu bringen, eine exponentielle Anzahl von Pfaden bei bestimmten Eingaben zu versuchen, was Ihr Programm einfriert. Vermeiden Sie verschachtelte Wiederholungen bei sich überlappenden Mustern. - Vergessene Anker. Ohne
^und$findet Ihr Muster Teilzeichenketten.\d{3}findet „123" in „abc12345". Verwenden Sie^\d{3}$, wenn Sie eine exakte Übereinstimmung benötigen.
Weiterführende Informationen
Der beste Weg, Regex zu lernen, ist zu experimentieren. Tippen Sie ein Muster ein, fügen Sie einen Testtext ein und sehen Sie, was markiert wird. Passen Sie an und iterieren Sie, bis Sie verstehen, wie jedes Teil funktioniert.
- Regex-Muster testen — interaktives Tutorial mit Beispielen
- Regex Tester — Muster und Testdaten einfügen, Treffer in Echtzeit hervorgehoben sehen
