Curious TechieDev Toolbox
Alle Leitfäden/Textverarbeitung8 min read

Was ist ein Regulärer Ausdruck (Regex)?

Endliche Automaten, Zeichenklassen, Quantifizierer, Lookaheads und Schutz vor katastrophalem Backtracking (ReDoS).

Wichtigste Erkenntnisse
  • Reguläre Ausdrücke beschreiben formale Suchmuster, die von DFA- oder NFA-Engines verarbeitet werden.
  • Wichtige Syntaxelemente sind Zeichenklassen, Quantifizierer (+, *) und Anker.
  • Katastrophales Backtracking (ReDoS) entsteht bei verschachtelten Quantifizierern und blockiert CPUs.
  • Lookarounds prüfen Bedingungen, ohne Zeichen aus dem Suchstrom zu verbrauchen.

Reguläre Ausdrücke (Regex) bieten eine kompakte Notation, um komplexe Textmuster in Zeichenketten, Konfigurationsdateien und Logfiles zu durchsuchen und zu validieren.

1. Grundlagen der Regex-Grammatik

Regex-Muster prüfen Zeichen entweder wörtlich (z. B. abc) oder über Metazeichen, die Zeichenklassen repräsentieren:

  • \d: Jede Ziffer (0-9).
  • \w: Jedes Wortzeichen (Buchstaben, Ziffern, Unterstrich).
  • \s: Jedes Whitespace-Zeichen (Leerzeichen, Tabs, Umbrüche).
  • [a-z0-9]: Benutzerdefinierte Zeichenklassen.

2. Gierige vs. genügsame Quantifikatoren

Standardmäßig sind Quantifikatoren wie * und + gierig (greedy) und erfassen den maximal möglichen Text. Ein angehängtes Fragezeichen (*?, +?) macht sie genügsam (lazy), sodass sie die kürzeste Übereinstimmung wählen.

3. Lookahead- und Lookbehind-Assertionen

Nullbreiten-Assertionen prüfen Kontextbedingungen, ohne Zeichen aus der Zeichenkette zu konsumieren:

  • (?=...) Positives Lookahead: Trifft zu, wenn das Muster folgt.
  • (?!...) Negatives Lookahead: Trifft zu, wenn das Muster NICHT folgt.
  • (?<=...) Positives Lookbehind: Trifft zu, wenn das Muster vorausgeht.
  • (?<!...) Negatives Lookbehind: Trifft zu, wenn das Muster NICHT vorausgeht.

4. Vermeidung katastrophalen Backtrackings (ReDoS)

Verschachtelte Quantifikatoren (z. B. ([a-zA-Z]+)+$) bei nicht passenden Texten lassen die Prüfzeit exponentiell wachsen (O(2^n)), blockieren Server-Threads und führen zu Denial-of-Service (ReDoS).