Wie man regulaere Ausdruecke (Regex) verwendet: kompletter Leitfaden fuer Entwickler
Lerne regulaere Ausdruecke von Grund auf. Grundsyntax, Zeichenklassen, Quantifizierer, Gruppen, Lookahead, Lookbehind und typische Muster fuer E-Mail, Telefon, URL und IP mit praktischen Beispielen.
Was sind regulaere Ausdruecke und wofuer werden sie verwendet
Regulaere Ausdruecke (Regex oder Regexp) sind Suchmuster, mit denen sich Text sehr praezise finden, validieren und bearbeiten laesst. Sie gehoeren zu den wichtigsten Werkzeugen in der Softwareentwicklung, Systemadministration und Datenverarbeitung.
Eine Regex ist im Kern eine Zeichenfolge, die ein Muster beschreibt. Statt viele Bedingungen im Code zu schreiben, kann ein einziges Regex-Muster komplexe Such- oder Validierungslogik abdecken.
Typische Einsatzgebiete:
- Datenvalidierung: E-Mail, Telefonnummer, URL oder Postleitzahl pruefen
- Suchen und Ersetzen: Muster in grossen Texten finden und austauschen
- Datenextraktion: Werte aus Logs oder unstrukturierten Texten herausziehen
- Log-Parsing: Fehler, IPs, Statuscodes und Routen analysieren
- Linting und Formatierung: Konventionen im Code ueberpruefen
- Routing in Frameworks: URL-Muster definieren
Regex ist in fast allen Programmiersprachen verfuegbar, darunter JavaScript, Python, Java, C#, PHP, Ruby, Go und Rust. Auch Tools wie grep, sed und awk arbeiten damit.
Wenn du beim Lesen direkt ueben willst, oeffne unser Regex-Testtool in einem zweiten Tab.
Grundsyntax: literale Zeichen und Metazeichen
Die Regex-Syntax besteht aus literalen Zeichen, die exakt so gesucht werden, und Metazeichen, die eine besondere Bedeutung haben.
Literale Zeichen:
Buchstaben, Zahlen und viele Symbole werden standardmaessig woertlich interpretiert. Das Muster Katze findet das Wort "Katze".
Wichtige Metazeichen:
| Metazeichen | Bedeutung | Beispiel | Treffer |
|---|---|---|---|
. | Beliebiges Zeichen ausser Zeilenumbruch | c.t | "cat", "cot", "c3t" |
^ | Anfang von Zeile oder String | ^Hallo | Nur am Anfang |
$ | Ende von Zeile oder String | Welt$ | Nur am Ende |
* | 0 oder mehr Wiederholungen | ab*c | "ac", "abc", "abbc" |
+ | 1 oder mehr Wiederholungen | ab+c | "abc", "abbc" |
? | 0 oder 1 Wiederholung | colou?r | "color", "colour" |
| | Alternative | Katze|Hund | "Katze" oder "Hund" |
\ | Escape | \. | Ein echter Punkt |
Metazeichen maskieren: Wenn ein Metazeichen als normaler Text gesucht werden soll, musst du es mit \ escapen.
\.sucht einen Punkt\*sucht ein Sternchen\?sucht ein Fragezeichen\(und\)suchen Klammern\\sucht einen Backslash
Praxisbeispiel: Um die Zeichenfolge "Preis: $9.99" zu finden, brauchst du Preis: \$9\.99.
Zeichenklassen und vordefinierte Klassen
Zeichenklassen definieren, welche Zeichen an einer bestimmten Stelle erlaubt sind.
Eigene Klassen mit [ ]:
| Muster | Bedeutung | Beispiel |
|---|---|---|
[abc] | a, b oder c | "a", "b", "c" |
[a-z] | Beliebiger Kleinbuchstabe | "a", "m", "z" |
[A-Z] | Beliebiger Grossbuchstabe | "A", "M", "Z" |
[0-9] | Beliebige Ziffer | "0", "5", "9" |
[a-zA-Z] | Beliebiger Buchstabe | "a", "Z", "m" |
[a-zA-Z0-9] | Beliebiges alphanumerisches Zeichen | "a", "3", "Z" |
[^abc] | Alles ausser a, b oder c | "d", "1", "Z" |
[^0-9] | Alles, was keine Ziffer ist | "a", "!", " " |
Vordefinierte Klassen:
| Kurzbefehl | Entspricht | Bedeutung |
|---|---|---|
\d | [0-9] | Ziffer |
\D | [^0-9] | Keine Ziffer |
\w | [a-zA-Z0-9_] | Wortzeichen |
\W | [^a-zA-Z0-9_] | Kein Wortzeichen |
\s | [\t\n\r\f\v ] | Leerraum |
\S | [^\t\n\r\f\v ] | Kein Leerraum |
\b | (kein direktes Aequivalent) | Wortgrenze |
Wortgrenze: \bKatze\b trifft das ganze Wort, aber nicht "Kaetzchen".
Praxisbeispiel: ^[a-zA-Z0-9-]+$ validiert eine Zeichenkette aus Buchstaben, Zahlen und Bindestrichen.
Quantifizierer und Wiederholungsmodifikatoren
Quantifizierer legen fest, wie oft ein Element vorkommen darf oder muss.
| Quantifizierer | Bedeutung | Beispiel | Treffer |
|---|---|---|---|
* | 0 oder mehr Mal | \d* | "", "5", "123" |
+ | 1 oder mehr Mal | \d+ | "5", "123" |
? | 0 oder 1 Mal | -?\d+ | "42", "-42" |
{n} | Genau n Mal | \d{4} | "2026" |
{n,} | n oder mehr Mal | \d{2,} | "12", "123" |
{n,m} | Zwischen n und m Mal | \d{2,4} | "12", "1234" |
Standardmaessig sind Quantifizierer greedy und greifen moeglichst viel Text. Mit einem zusaetzlichen ? werden sie lazy und greifen nur das notwendige Minimum.
Im Text <b>Hallo</b> und <b>Welt</b> faengt <b>.*</b> alles auf einmal, waehrend <b>.*?</b> die einzelnen Tags trennt.
Praxisbeispiel: ^\d{5}(-\d{4})?$ validiert eine US-ZIP mit optionaler Erweiterung.
Capture-Gruppen und Referenzen
Gruppen strukturieren ein Muster, speichern Teiltreffer und erlauben spaetere Rueckverweise.
| Syntax | Typ | Beschreibung |
|---|---|---|
(muster) | Capture-Gruppe | Speichert den Treffer |
(?:muster) | Non-Capture-Gruppe | Gruppiert ohne Speichern |
(?<name>muster) | Benannte Gruppe | Speichert mit Namen |
\1, \2 | Backreference | Verweist auf fruehere Gruppen |
Beispiel: (\d{4})-(\d{2})-(\d{2}) zerlegt ein ISO-Datum in Jahr, Monat und Tag.
Benannte Gruppen wie (?<year>\d{4}) verbessern die Lesbarkeit im Code.
Backreferences sind hilfreich fuer doppelte Woerter oder passende Anfuehrungszeichen, etwa bei (\w+)\s+\1 oder (['"])(.*?)\1.
Alternativen: (https?|ftp):// passt auf "http://", "https://" oder "ftp://". Teste solche Muster in unserem Regex-Tool.
Lookahead und Lookbehind: Positionsaussagen
Lookahead und Lookbehind pruefen, ob vor oder nach der aktuellen Position ein bestimmtes Muster steht, ohne Zeichen zu verbrauchen.
| Syntax | Name | Bedeutung |
|---|---|---|
(?=muster) | Positive lookahead | Danach muss das Muster folgen |
(?!muster) | Negative lookahead | Danach darf das Muster nicht folgen |
(?<=muster) | Positive lookbehind | Davor muss das Muster stehen |
(?<!muster) | Negative lookbehind | Davor darf das Muster nicht stehen |
Beispiel 1: ^(?=.*[A-Z])(?=.*[a-z])(?=.*\d).{8,}$ validiert ein starkes Passwort.
Beispiel 2: (?<=\$)\d+\.\d{2} extrahiert Preise ohne Waehrungssymbol.
Beispiel 3: \w+(?!\s*:) findet Woerter, denen kein Doppelpunkt folgt.
Beispiel 4: (?<!-)\b\d+\b findet nur positive Zahlen. Je nach Flavor gibt es beim Lookbehind technische Grenzen.
Hauefige Muster: E-Mail, Telefon, URL und IP
Hier findest du bewaehrte Regex-Muster fuer typische Validierungen. Gerade bei komplexen Formaten wie E-Mail solltest du sie in der Praxis mit einer Server-Validierung kombinieren.
1. E-Mail: ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
2. Internationale Telefonnummer (E.164): ^\+?[1-9]\d{1,14}$
3. URL: ^https?:\/\/[\w.-]+(?:\.[a-zA-Z]{2,})(?:\/[\w.~:/?#\[\]@!$&'()*+,;=-]*)?$
4. IPv4: ^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$
5. ISO-Datum: ^\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\d|3[01])$
6. CSS-Hexfarbe: ^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$
Teste diese Muster in unserem Regex-Testtool. Fuer JSON-Strukturen kannst du ausserdem unseren JSON-Validator nutzen.
Flags, Performance und Best Practices
Wer Regex sicher einsetzen will, sollte die Flags kennen und auf Performance sowie Wartbarkeit achten.
| Flag | Name | Wirkung |
|---|---|---|
g | Global | Findet alle Treffer |
i | Case insensitive | Ignoriert Gross-/Kleinschreibung |
m | Multiline | ^ und $ gelten pro Zeile |
s | Dotall | Der Punkt erfasst auch Zeilenumbrueche |
u | Unicode | Voller Unicode-Support |
In JavaScript schreibt man /muster/flags, in Python zum Beispiel re.compile(r'muster', re.IGNORECASE | re.MULTILINE).
- Katastrophales Backtracking vermeiden: Muster wie
(a+)+$koennen sehr teuer werden - Praezise formulieren:
[a-z]+ist oft besser als.+ - Anker nutzen:
^und$begrenzen die Suche - Non-Capture-Gruppen verwenden:
(?:...), wenn nichts gespeichert werden muss - Muster kompilieren: wenn sie haeufig wiederverwendet werden
Kommentiere komplexe Regex, teste positive und negative Faelle und verwende fuer HTML, XML oder JSON lieber spezialisierte Parser. Zum Ueben eignet sich unser Regex-Tool.
Probieren Sie dieses Tool:
Tool öffnen→Häufig gestellte Fragen
Was ist der Unterschied zwischen * + und ? in Regex?
Das Sternchen (*) bedeutet 0 oder mehr Wiederholungen, das Pluszeichen (+) bedeutet 1 oder mehr Wiederholungen und das Fragezeichen (?) bedeutet 0 oder 1 Wiederholung, also optional.
Wie validiere ich eine E-Mail mit einem regulaeren Ausdruck?
Ein praktisches Muster ist ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$. Es deckt die haeufigsten Faelle ab, sollte in Produktivsystemen aber durch Server-Validierung ergaenzt werden.
Was bedeuten \d \w und \s in Regex?
\d steht fuer eine Ziffer, \w fuer ein Wortzeichen und \s fuer Leerraum. Die Grossbuchstabenvarianten \D, \W und \S stehen jeweils fuer das Gegenteil.
Was ist ein Lookahead und wofuer wird er verwendet?
Ein Lookahead ist eine Pruefung ohne Zeichenverbrauch. Er kontrolliert, ob nach der aktuellen Position ein bestimmtes Muster folgt. Das ist sehr nuetzlich bei komplexen Validierungen wie Passwoertern.
Was ist katastrophales Backtracking und wie vermeidet man es?
Dabei probiert die Regex-Engine wegen eines mehrdeutigen Musters extrem viele Kombinationen aus. Man vermeidet das mit praeziseren Mustern, ohne unnoetig verschachtelte Quantifizierer und mit strengeren Konstruktionen, wenn der Flavor sie unterstuetzt.
Funktioniert Regex in allen Programmiersprachen gleich?
Nicht ganz. Die Grundidee ist aehnlich, aber jeder Flavor bringt Unterschiede mit, etwa bei Lookbehind, Unicode, Escapes oder erweiterten Funktionen.