In diesem Artikel
Was sind reguläre Ausdrücke?
Reguläre Ausdrücke (Regex) sind Zeichenfolgen, die Suchmuster definieren. Sie kommen in nahezu jeder Programmiersprache und in jedem Texteditor zum Einsatz, um Zeichenketten anhand von Regeln statt exaktem Text zu finden, abzugleichen und zu bearbeiten. Ein einziges Regex-Muster kann Tausende verschiedener Zeichenketten abgleichen, die eine gemeinsame Struktur teilen.
Die Regex-Syntax wirkt auf den ersten Blick kryptisch, folgt aber einer logischen Grammatik: Literale Zeichen stehen für sich selbst, während spezielle Metazeichen wie . (beliebiges Zeichen), * (null oder mehr) und [] (Zeichenklassen) flexible Abgleichregeln festlegen. Wer Regex-Muster lesen lernt, erschließt sich leistungsstarke Möglichkeiten der Textverarbeitung, die andernfalls Dutzende Zeilen Code erfordern würden.
So funktionieren Regex-Muster
Eine Regex-Engine verarbeitet Ihr Muster Zeichen für Zeichen anhand des Eingabetextes, verfolgt mögliche Treffer und setzt zurück (Backtracking), wenn ein Pfad scheitert. Wenige zentrale Bausteine machen jedes Muster lesbar.
- Zeichenklassen und Quantifizierer -- [a-z] trifft auf jeden Kleinbuchstaben zu, \d auf jede Ziffer, + bedeutet ein oder mehr, und {2,4} steht für 2 bis 4 Wiederholungen
- Gruppen und Alternativen -- Klammern () bilden Erfassungsgruppen zum Extrahieren von Teiltreffern, während der Pipe-Operator | eine ODER-Logik zwischen Alternativen bereitstellt
- Anker und Lookarounds -- ^ und $ verankern Treffer am Anfang und Ende einer Zeile, während Lookaheads (?=...) und Lookbehinds (?<=...) Bedingungen prüfen, ohne Zeichen zu verbrauchen
Kostenlos testen – keine Registrierung erforderlich
Ein Regex-Muster erklären →Wann Sie Regex einsetzen sollten
Reguläre Ausdrücke sind das Standardwerkzeug für musterbasierte Textverarbeitung in der Softwareentwicklung.
- Formularvalidierung -- prüfen, ob Benutzereingaben erwarteten Formaten wie E-Mail-Adressen, Telefonnummern oder Postleitzahlen entsprechen, ohne eigene Parsing-Logik schreiben zu müssen
- Log-Auswertung -- Zeitstempel, Fehlercodes und IP-Adressen aus Server-Logs extrahieren und mithilfe von Erfassungsgruppen unstrukturierte Textdaten strukturieren
- Suchen und Ersetzen -- Massentransformationen von Text in Code-Editoren oder Build-Skripten durchführen, etwa Variablen umbenennen oder Datumsformate über eine gesamte Codebasis hinweg neu formatieren
Häufig gestellte Fragen
Was ist der Unterschied zwischen Regex- und Glob-Mustern?
Glob-Muster (wie *.txt) sind einfachere Platzhaltermuster, die vor allem zum Abgleich von Dateinamen in Shells dienen. Regex ist weitaus ausdrucksstärker: Es unterstützt Alternativen, Quantifizierer, Lookaheads, Rückverweise und Zeichenklassen. Verwenden Sie Globs für Dateipfade und Regex für den Abgleich von Textinhalten.
Was bedeutet gieriges (greedy) im Vergleich zu genügsamem (lazy) Abgleich?
Gierige Quantifizierer (*, +, {n,m}) gleichen so viel Text wie möglich ab, während genügsame Quantifizierer (*?, +?, {n,m}?) so wenig wie möglich abgleichen. Bei der Eingabe <b>bold</b> etwa trifft das gierige Muster <.*> auf die gesamte Zeichenkette zu, während <.*?> nur <b> abgleicht. Setzen Sie genügsame Quantifizierer ein, wenn Sie den kürzestmöglichen Treffer benötigen.
Kann Regex Performance-Probleme verursachen?
Ja. Bestimmte Muster mit verschachtelten Quantifizierern können katastrophales Backtracking auslösen, bei dem die Engine eine exponentielle Anzahl von Pfaden durchläuft. Muster wie (a+)+ auf einer langen Kette von a's können Ihr Programm einfrieren. Vermeiden Sie verschachtelte Quantifizierer auf überlappenden Zeichenmengen, nutzen Sie atomare Gruppen oder possessive Quantifizierer, sofern verfügbar, und testen Sie Muster gegen Worst-Case-Eingaben.