Regex für Einsteiger: 10 Muster, die Sie wirklich täglich nutzen
2026-08-06
Reguläre Ausdrücke haben den Ruf, Write-only-Code zu sein: ein dichter String aus Schrägstrichen, Klammern und geschweiften Zeichen, den man von Stack Overflow kopiert und betet, ihn nie anpassen zu müssen. Doch das Kernvokabular ist klein — Zeichenklassen, Quantoren, Gruppen und Anker —, und hat das einmal Klick gemacht, laufen die meisten Matching-Aufgaben der realen Welt auf kurze, lesbare Muster hinaus. Diese Anleitung überspringt den erschöpfenden Grammatikkurs und geht stattdessen die 10 Muster durch, die im Alltag am häufigsten vorkommen, und erklärt dabei jedes Symbol, damit Sie sie selbst schreiben und anpassen können, statt sie nur einzufügen.
Was ein regulärer Ausdruck wirklich ist
Ein regulärer Ausdruck (Regex) ist eine winzige Sprache, um zu beschreiben, wie ein String aussieht. Gegeben ein Muster, beantwortet eine Regex-Engine zwei Arten von Fragen: entspricht dieser Text dem Format (Validierung) und wo sind die Teile, die dem Format entsprechen (Extraktion). Jede gängige Sprache bringt eine Regex-Engine mit, und Editoren, grep und Log-Analysewerkzeuge sprechen alle denselben Dialekt.
Ein minimales Beispiel: \d{3}-\d{4} matcht Strings wie 555-0134. Hier bedeutet \d „eine beliebige einzelne Ziffer“, {3} „wiederhole das vorherige Element dreimal“, und - ist einfach ein wörtlicher Bindestrich. Jeder Regex, so einschüchternd er wirkt, ist aus kleinen Teilen wie diesen zusammengesetzt — lernen Sie die Teile, und das Ganze wird lesbar.
Muster 1: E-Mail-Adresse
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
Stück für Stück gelesen: ^ und $ sind Anker, die „Stringanfang“ und „Stringende“ bedeuten, die gesamte Eingabe muss also passen, nicht nur einen Treffer enthalten. [a-zA-Z0-9._%+-] ist eine Zeichenklasse — jedes der gelisteten Zeichen zählt —, und das + danach bedeutet „ein- oder mehrmals“. Das @ ist wörtlich. In \. escapt der Backslash den Punkt: Ein unescapter . bedeutet „ein beliebiges Zeichen“, das Escaping nagelt ihn auf einen echten Punkt fest. {2,} verlangt mindestens zwei Buchstaben für die Top-Level-Domain.
Ein vollständig RFC-5322-konformer E-Mail-Regex läuft über tausend Zeichen lang, und niemand nutzt ihn in der Praxis. Das obige Muster deckt im Wesentlichen alle echten Adressen ab, die Sie in einem Formular sehen. Wollen Sie nur prüfen, ob eine Adresse wohlgeformt ist, ohne Code zu schreiben, erledigt ein Online-E-Mail-Validator das sofort.
Muster 2: URL
https?://[\w-]+(\.[\w-]+)+[\w\-.,@?^=%&:/~+#]*
In s? macht das Fragezeichen das vorangehende Zeichen optional, sodass sowohl http als auch https passen. \w ist die Kurzform für [a-zA-Z0-9_] — Buchstaben, Ziffern und Unterstrich. Die Gruppe (\.[\w-]+)+ matcht punktgetrennte Domainsegmente wie .example.co, und das äußere + verlangt mindestens eines davon. Die abschließende Zeichenklasse listet Zeichen, die in Pfaden und Query-Strings gängig legal sind, wobei * null oder mehr davon erlaubt.
Dieses Muster ist großartig, um URLs aus Text zu ziehen. Für strenge Validierung bevorzugen Sie den eingebauten URL-Parser Ihrer Sprache und behandeln den Regex als groben Filter.
Muster 3: US-amerikanische Telefonnummer
^\+?1?[-.\s]?\(?\d{3}\)?[-.\s]?\d{3}[-.\s]?\d{4}$
Dieses liest sich fast wie Englisch, sobald Sie die Teile kennen: ein optionales +, ein optionaler Ländercode 1, ein optionales Trennzeichen (-, . oder Leerraum — beachten Sie, dass \s jeden Leerraum matcht), eine optionale öffnende Klammer, genau drei Ziffern, eine optionale schließende Klammer, ein weiteres optionales Trennzeichen, drei Ziffern, ein weiteres Trennzeichen und vier Ziffern. Es akzeptiert 415-555-0134, (415) 555-0134 und +1 415.555.0134 gleichermaßen.
Die tiefere Lehre: Telefonformate variieren je nach Land stark, es gibt also keinen universellen Telefon-Regex. Für alles Internationale greifen Sie zu einer dedizierten Telefonnummern-Bibliothek statt zu einem Muster.
Muster 4: Datum im Format YYYY-MM-DD
^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$
Dieses Muster zeigt Alternation innerhalb einer Gruppe. Klammern bündeln Alternativen, und die Pipe | bedeutet „oder“. Die Monatsgruppe (0[1-9]|1[0-2]) erlaubt 01–09 und 10–12 und weist 00 und 13 zurück; die Tagesgruppe erlaubt analog 01–31.
Denken Sie daran: Das erzwingt nur das Format, nicht die Existenz — 2026-02-31 matcht trotzdem, obwohl der Februar nie 31 Tage hat. Echte Datumsvalidierung braucht Code. Das ist die allgemeine Regel: Regex prüft die Form, Programme prüfen die Bedeutung.
Muster 5: Zahlen extrahieren (Dezimalzahlen und negative)
-?\d+(\.\d+)?
Das führende -? ist ein optionales Minuszeichen. \d+ greift den Ganzzahlteil, und (\.\d+)? ist ein optionaler Bruchteil: ein escapter Punkt gefolgt von einer oder mehreren Ziffern, die ganze Gruppe durch das abschließende ? optional gemacht. Es matcht 42, -7 und 3.14.
Das ist eines der meistgenutzten Muster im Log-Parsing und in der Datenbereinigung. Kombiniert mit dem globalen Flag (g in JavaScript) extrahiert es in einem Durchgang jede Zahl aus einem Textklumpen.
Muster 6: Leerraum trimmen
^\s+|\s+$
\s matcht jedes Leerraumzeichen — Leerzeichen, Tabs, Zeilenumbrüche. Mit Ersetzung verwendet (Treffer durch einen leeren String ersetzen), ist dieses Muster ein handgebautes trim(): Die zwei Zweige beiderseits der | fressen führenden und abschließenden Leerraum in einer Operation.
Um zusätzlich Läufe internen Leerraums auf ein einzelnes Leerzeichen zu kollabieren, fügen Sie einen zweiten Durchgang hinzu, der \s{2,} durch ein Leerzeichen ersetzt — {2,} bedeutet „mindestens zweimal“.
Muster 7: Strings in Anführungszeichen
"([^"\\]|\\.)*"
Beim Parsen von CSV oder einfachen Konfigurationsformaten brauchen Sie oft den Inhalt doppelt quotierter Strings. Das Skelett ist "..."; der interessante Teil ist die Mitte. [^"\\] ist eine negierte Zeichenklasse, die alles matcht, was weder Anführungszeichen noch Backslash ist, während \\. Escape-Sequenzen wie \" oder \\ matcht. Die beiden zu alternieren und mit * zu wiederholen bedeutet, dass ein escaptes Anführungszeichen im String das Match nicht früh beendet.
Muster 8: IPv4-Adresse
\b((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\b
Es sieht furchteinflößend aus, aber die Struktur ist einfach. Die Alternation (25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d) beschreibt ein gültiges Oktett 0–255: 250–255, 200–249, 100–199 oder alles unter 100. Zusammen decken diese vier Fälle genau 0–255 ab, Fälschungen wie 999.1.1.1 werden also zurückgewiesen. Die ersten drei Oktette sind von einem Punkt gefolgt und mit {3} wiederholt; das letzte steht allein. \b markiert Wortgrenzen, damit das Muster nicht ein Stück aus einem längeren Ziffernstring matcht.
Für beiläufiges Troubleshooting ist das lockerere \b(?:\d{1,3}\.){3}\d{1,3}\b meist in Ordnung — behalten Sie die strenge Version für Validierungslogik.
Muster 9: Nicht-ASCII-Text matchen (Unicode-Bereiche)
[\u4e00-\u9fff]+
Zeichenklassen sind nicht auf a-z begrenzt. Eine Klasse kann jeden Bereich von Codepunkten umspannen, und diese — 一 bis 龥, der Hauptblock der CJK-Unified-Ideographen — matcht Läufe chinesischer Zeichen. Typische Verwendungen sind das Validieren, dass ein Namensfeld Chinesisch enthält, oder das Extrahieren der chinesischen Teile aus gemischtsprachigem Text. Dieselbe Technik verallgemeinert sich: [\u0400-\u04ff]+ matcht Kyrillisch, [\u3040-\u30ff]+ matcht japanische Kana. Ein Stolperstein, den man kennen sollte: Satzzeichen dieser Schriften leben in anderen Blöcken, ein Muster zum „Entfernen chinesischer Kommas und Punkte“ muss diese Zeichen also separat listen. In modernem JavaScript können Sie außerdem zu Unicode-Property-Escapes wie \p{Script=Han} mit dem u-Flag greifen, was lesbarer ist und korrekt bleibt, während Unicode sich weiterentwickelt.
Muster 10: HTML-Tags
<([a-z][a-z0-9]*)\b[^>]*>(.*?)</\1>
Das letzte Muster führt zwei fortgeschrittene Teile ein. [^>]* matcht den Attributabschnitt (alles, was kein > ist). (.*?) nutzt einen lazy Quantor, sodass er am nächstgelegenen schließenden Tag stoppt statt am fernsten. Und \1 ist ein Backreference — er verlangt, dass der von Gruppe 1 erfasste Text erneut erscheint, und garantiert, dass öffnender und schließender Tag denselben Namen haben: <div>...</div> matcht, <div>...</span> nicht.
Die übliche Warnung gilt: Regex ist kein echter HTML-Parser und bricht bei beliebig verschachteltem Markup. Aber für das Greifen einfacher, vorhersehbarer Fragmente ist es noch immer das schnellste Werkzeug in der Kiste.
Greedy vs. lazy: die Falle, in die jeder einmal tappt
Quantoren (*, +, {m,n}) sind standardmäßig greedy: Sie verbrauchen so viel wie möglich. Die klassische Vorführung ist, <.+> auf <b>fett</b> normal <i>kursiv</i> anzuwenden. Sie erwarten, dass es <b> matcht; stattdessen verschlingt es alles vom ersten < bis zum allerletzten > in der Zeile, weil .+ so weit wie möglich frisst, bevor die Engine zurückläuft, um ein abschließendes > zu finden.
Ein ? an einen Quantor anzuhängen macht ihn lazy: so wenig wie möglich matchen. <.+?> ergibt vier kurze, getrennte Treffer — <b>, </b>, <i>, </i>. Die Faustregel: Wenn Sie „alles bis zu einem Terminator“ matchen, greifen Sie zu einem lazy Quantor oder, oft besser, zu einer negierten Klasse wie [^>]*, die typischerweise schneller und weniger fehleranfällig ist.
Wie man einen Regex richtig testet
Einen ungetesteten Regex auszuliefern ist der klassische Anfängerfehler. Ein besserer Ablauf:
- Iterieren Sie in einem visuellen Tester, nicht in Ihrer Codebasis. Fügen Sie echte Beispieldaten in einen Online-Regex-Tester ein — er hebt jeden Treffer live hervor, listet Capture-Gruppen und markiert ungültige Syntax, sodass jede Anpassung sofortiges Feedback gibt statt eines weiteren
console.log-Zyklus. - Bauen Sie Positiv- und Negativtestsätze. Positive sollten jede legitime Variante abdecken, die Sie erwarten (E-Mails mit
+-Tags, URLs mit Ports). Negative zählen genauso: eine E-Mail ohne ihr@, das Datum2026-13-45, die IP300.1.1.1— solche Beinahe-Treffer müssen fehlschlagen. - Achten Sie auf Ihre Flags. Dasselbe Muster verhält sich völlig anders mit
g(global),i(groß-/kleinschreibungsunabhängig) oderm(mehrzeilig, wobei^und$pro Zeile matchen). Stellen Sie sicher, dass die Flags in Ihrem Tester denen im Produktionscode entsprechen. - Hüten Sie sich vor katastrophalem Backtracking. Verschachtelte Quantoren wie
(a+)+können bei gegnerischer Eingabe exponentielle Zeit brauchen und einen Dienst zum Hängen bringen. Wiederholt Ihr Muster eine Wiederholung, benchmarken Sie es vor dem Deployment gegen einen langen nicht passenden String.
Niemand merkt sich jedes Symbol, und Sie müssen es nicht — halten Sie einen Regex-Spickzettel offen, während Sie arbeiten. Regex ist ein Handwerk, das man durch Tun lernt: Werden Sie mit diesen zehn Mustern vertraut, und neue Anforderungen werden kleine Variationen bekannter Dinge statt Reisen zurück zum Grammatiklehrbuch.