Regulaere Ausdruecke sind ein maectiges Werkzeug – wenn man weiss wie. Ein praktisches Cheat Sheet zum Bookmarken.
Grundzeichen¶
. \d \D \w \W \s \S \b
Quantifizierer¶
* + ? {3} {2,5} {3,} *?
Gruppen¶
(abc) (?:abc) a|b \1
Lookahead/behind¶
(?=x) (?!x) (?<=x) (?<!x)
Beispiele¶
Email: [a-zA-Z0-9._% +-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}
IP: \b(?:\d{1,3}.){3}\d{1,3}\b
Datum: \d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\d|3[01])
Tel CZ: (?:+420)?\s?\d{3}\s?\d{3}\s?\d{3}
In der Praxis¶
grep -oP ‘\b\d{1,3}(.\d{1,3}){3}\b’ access.log
import re; emails = re.findall(r’[\w.+-]+@[\w-]+.[\w.]+’, text)
Fortgeschrittene Techniken¶
Named Groups ((?P<name>...) in Python) verbessern die Regex-Lesbarkeit und ermoeglichen den Zugriff auf erfasste Gruppen ueber den Namen. Non-Capturing Groups ((?:...)) gruppieren ohne Erfassung, was die Engine beschleunigt. Lookahead ((?=...)) und Lookbehind ((?<=...)) pruefen den Kontext, ohne ihn in das Ergebnis einzubeziehen — nuetzlich fuer Passwortvalidierung (muss eine Ziffer enthalten, aber die Ziffer soll nicht im Match sein).
Atomic Groups und Possessive Quantifiers verhindern Backtracking und schuetzen vor ReDoS (Regular Expression Denial of Service). Testen Sie Regex immer mit Edge Cases und grossen Eingaben. Lazy Quantifiers (*?, +?) matchen die minimale Zeichenanzahl, im Gegensatz zu Greedy-Varianten, die das Maximum matchen. Fuer komplexes Parsing (HTML, JSON, Programmiersprachen) verwenden Sie kein Regex — nutzen Sie einen dedizierten Parser.
Tipp¶
Testen Sie auf regex101.com. Und wenn ein Regex mehr als 2 Zeilen umfasst, erwaegen Sie einen Parser.