Alle Artikel

Reguläre Ausdrücke: Grundsyntax und typische Muster

Ein regulärer Ausdruck (Regex) ist eine kompakte Möglichkeit, ein Textmuster zu beschreiben — nicht eine konkrete Zeichenkette, sondern eine Regel, der eine Zeichenkette entsprechen muss. Statt Zeichen in einer Schleife zu durchlaufen, kann man mit einem einzigen Ausdruck eine komplexe Struktur prüfen oder finden.

Grundlegende Bausteine

  • Zeichenklassen\d (Ziffer), \w (Buchstabe/Ziffer/Unterstrich), \s (Leerraum), oder eine eigene Klasse wie [a-zA-Z].
  • Quantifizierer* (0 oder mehr), + (1 oder mehr), ? (0 oder 1), {2,5} (2 bis 5 Mal).
  • Erfassungsgruppen — Klammern (...) markieren einen Teil des Treffers, der später separat verwendet werden kann, etwa beim Ersetzen.
  • Anker^ und $ binden ein Muster an den Anfang oder das Ende einer Zeile.

Warum \w auch bei deutschem Text versagt

Man könnte annehmen, \w funktioniere für Deutsch problemlos, weil es „nur" das lateinische Alphabet ist. Tatsächlich bedeutet \w in der JavaScript-Regex-Engine, auf der dieses Tool läuft, strikt [A-Za-z0-9_] — reines ASCII. Der Test /^\w+$/.test('Straße') liefert false, weil ß außerhalb dieses Bereichs liegt, und genauso scheitert /^\w+$/.test('Grüße') am ü. Selbst der Unicode-Flag u ändert daran nichts, denn er erweitert nicht automatisch die Bedeutung von \w. Wer Wörter mit Umlauten oder ß korrekt erfassen will, braucht /^[\p{L}]+$/u — die Unicode-Eigenschaft „beliebiger Buchstabe", die nur zusammen mit dem u-Flag verfügbar ist.

Gieriges gegen faules Matching

Standardmäßig sind Quantifizierer „gierig" — sie versuchen, möglichst viele Zeichen zu erfassen, und geben nur nach, wenn das einen Treffer verhindert. Zum Beispiel würde <.+> bei <a>text</a> alles vom ersten < bis zum allerletzten > erfassen. Ein ? nach einem Quantifizierer (<.+?>) macht ihn „faul" — er erfasst so wenig wie möglich und stoppt beim ersten gültigen Treffer.

Wozu man das braucht

  • Das Format von Eingabedaten validieren (E-Mail, Telefonnummer, Postleitzahl).
  • Text anhand eines Musters statt einer exakten Übereinstimmung suchen und massenhaft ersetzen.
  • Strukturierte Daten aus Logs oder unstrukturiertem Text extrahieren.

Katastrophales Backtracking

Verschachtelte Quantifizierer wie (a+)+ können die Regex-Engine bei bestimmten Eingaben dazu zwingen, eine exponentielle Anzahl von Kombinationen durchzuprobieren, bevor sie feststellt, dass kein Treffer vorliegt — die Seite oder der Server „hängt" bei einem scheinbar einfachen Ausdruck. Das ist eine reale Schwachstellenklasse (ReDoS), daher sollten komplexe verschachtelte Quantifizierer an langen, „fast passenden" Zeichenketten getestet werden, nicht nur an den erwarteten Beispielen.

Tool ausprobieren