Wie man regulaere Ausdruecke (Regex) verwendet: kompletter Leitfaden fuer Entwickler

12 Min. Lesezeit

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:

MetazeichenBedeutungBeispielTreffer
.Beliebiges Zeichen ausser Zeilenumbruchc.t"cat", "cot", "c3t"
^Anfang von Zeile oder String^HalloNur am Anfang
$Ende von Zeile oder StringWelt$Nur am Ende
*0 oder mehr Wiederholungenab*c"ac", "abc", "abbc"
+1 oder mehr Wiederholungenab+c"abc", "abbc"
?0 oder 1 Wiederholungcolou?r"color", "colour"
|AlternativeKatze|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 [ ]:

MusterBedeutungBeispiel
[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:

KurzbefehlEntsprichtBedeutung
\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.

QuantifiziererBedeutungBeispielTreffer
*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.

SyntaxTypBeschreibung
(muster)Capture-GruppeSpeichert den Treffer
(?:muster)Non-Capture-GruppeGruppiert ohne Speichern
(?<name>muster)Benannte GruppeSpeichert mit Namen
\1, \2BackreferenceVerweist 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.

SyntaxNameBedeutung
(?=muster)Positive lookaheadDanach muss das Muster folgen
(?!muster)Negative lookaheadDanach darf das Muster nicht folgen
(?<=muster)Positive lookbehindDavor muss das Muster stehen
(?<!muster)Negative lookbehindDavor 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.

FlagNameWirkung
gGlobalFindet alle Treffer
iCase insensitiveIgnoriert Gross-/Kleinschreibung
mMultiline^ und $ gelten pro Zeile
sDotallDer Punkt erfasst auch Zeilenumbrueche
uUnicodeVoller 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.