Reguläre Ausdrücke – kurz Regex – sind eine der mächtigsten Fähigkeiten in der Softwareentwicklung. Sie ermöglichen es, Texte nach komplexen Mustern zu durchsuchen, zu validieren und zu transformieren. Gleichzeitig gelten sie als schwer lesbar und fehleranfällig. Regex101 ist ein kostenloses Online-Tool, das Regex-Ausdrücke in Echtzeit erklärt, debuggt und testet – ein unverzichtbares Werkzeug für jeden Entwickler.
Was sind Reguläre Ausdrücke und wofür braucht man sie?
Reguläre Ausdrücke sind formale Zeichenketten, die ein Suchmuster beschreiben. Sie werden eingesetzt zum:
- Validieren von Eingaben (E-Mail-Adressen, Telefonnummern, Postleitzahlen)
- Suchen und Ersetzen in Texten und Code-Editoren
- Parsen von Log-Dateien und strukturierten Textformaten
- Extrahieren von Daten aus HTML, CSV oder anderen Formaten
- URL-Routing in Web-Frameworks (z. B. Flask, Rails, Express)
Die Regex101-Oberfläche erklärt
Regex101 ist in vier Bereiche aufgeteilt:
- Pattern-Eingabe (oben): Hier tippt man den regulären Ausdruck ein. Matches werden farblich hervorgehoben, sobald man tippt.
- Test-String (Mitte): Der Text, in dem gesucht wird. Treffer leuchten sofort auf.
- Explanation (rechts): Jedes Element des Ausdrucks wird einzeln erklärt – ideal zum Lernen.
- Match Information (unten rechts): Zeigt alle Matches mit Gruppen und Positionen im Text.
Grundlegende Syntax: Metazeichen, Quantifizierer und Zeichenklassen
| Element | Syntax | Bedeutung | Beispiel |
|---|---|---|---|
| Beliebiges Zeichen | . |
Jedes Zeichen außer Zeilenumbruch | a.c matcht „abc", „axc" |
| Null oder mehr | * |
0 oder mehr Wiederholungen | ab*c matcht „ac", „abc", „abbc" |
| Ein oder mehr | + |
1 oder mehr Wiederholungen | ab+c matcht „abc", „abbc" |
| Optional | ? |
0 oder 1 Wiederholung | colou?r matcht „color" und „colour" |
| Genau n-mal | {n} |
Exakt n Wiederholungen | \d{4} matcht „2026" |
| Zeichenklasse | [abc] |
Eines der genannten Zeichen | [aeiou] matcht jeden Vokal |
| Negierte Klasse | [^abc] |
Keines der genannten Zeichen | [^0-9] matcht alles außer Ziffern |
| Ziffern | \d |
Äquivalent zu [0-9] |
\d+ matcht jede Zahl |
| Wortzeichen | \w |
Buchstaben, Ziffern, Unterstrich | \w+ matcht Wörter |
| Whitespace | \s |
Leerzeichen, Tab, Zeilenumbruch | \s+ matcht Leerraum |
Gruppen und Capturing
Mit runden Klammern werden Gruppen gebildet. Eine Capturing-Gruppe (pattern) speichert den gematchten Text für spätere Verwendung – z. B. für Ersetzungsoperationen oder die Weiterverarbeitung in Code. Über $1, $2 etc. (in den meisten Sprachen) wird auf die Gruppe zugegriffen.
Named Groups erlauben lesbarere Ausdrücke: (?P<year>\d{4}) in Python oder (?<year>\d{4}) in JavaScript. In Regex101 werden benannte Gruppen farblich hervorgehoben und im Match-Bereich mit ihrem Namen angezeigt.
Nicht-fangenden Gruppen ((?:pattern)) werden eingesetzt, wenn eine Gruppe für die Logik nötig ist, ihr Inhalt aber nicht gespeichert werden soll – das spart Speicher und erhöht die Performanz.
Lookahead und Lookbehind
Lookaround-Assertions prüfen den Kontext, ohne Zeichen zu konsumieren:
- Positiver Lookahead
(?=...): Matcht eine Position, auf die ein bestimmtes Muster folgt. Beispiel:\w+(?=\.de)findet Wörter direkt vor „.de". - Negativer Lookahead
(?!...): Matcht, wenn das Muster nicht folgt. - Positiver Lookbehind
(?<=...): Matcht eine Position, der ein bestimmtes Muster vorausgeht. Beispiel:(?<=€)\d+findet Zahlen nach einem €-Zeichen. - Negativer Lookbehind
(?<!...): Matcht, wenn das Muster nicht vorausgeht.
Flags
Flags modifizieren das Verhalten des gesamten Ausdrucks. In Regex101 werden sie im Dropdown neben dem Pattern-Feld gesetzt:
g(global): Findet alle Treffer, nicht nur den ersten.i(case-insensitive): Groß-/Kleinschreibung wird ignoriert.m(multiline):^und$matchen Zeilenanfang/-ende statt Stringanfang/-ende.s(dotall): Der Punkt.matcht auch Zeilenumbrüche.
Regex-Flavors: PCRE, Python, JavaScript und Go im Vergleich
| Feature | PCRE2 | Python (re) | JavaScript | Go (regexp) |
|---|---|---|---|---|
| Lookbehind mit variabler Länge | Ja | Ja (ab 3.x) | Nein | Nein |
| Named Groups | Ja (?P<name>...) |
Ja (?P<name>...) |
Ja (?<name>...) |
Ja (?P<name>...) |
| Rekursive Muster | Ja | Nein | Nein | Nein |
| Unicode-Kategorie-Klassen | Ja \p{L} |
Ja (mit re.UNICODE) | Ja (ab ES2018) | Ja \p{L} |
| Possessive Quantifier | Ja | Nein | Nein | Nein |
Praktische Beispiele
Häufig genutzte Regex-Muster für Entwickler:
- E-Mail:
^[\w.+-]+@[\w-]+\.[a-zA-Z]{2,}$ - URL:
https?://[\w.-]+(?:/[\w./?=&%-]*)? - IPv4-Adresse:
^(\d{1,3}\.){3}\d{1,3}$ - Datum (YYYY-MM-DD):
^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$
All diese Muster lassen sich direkt in Regex101 einfügen und mit eigenen Testdaten prüfen. Die Erklärungssektion rechts zeigt dabei jedes Detail des Musters. Für weiterführende Konzepte empfiehlt sich auch die MDN-Dokumentation zu regulären Ausdrücken.
Häufige Fragen (FAQ)
- Was ist der Unterschied zwischen PCRE und JavaScript-Regex?
- PCRE (Perl Compatible Regular Expressions) unterstützt mehr Features wie rekursive Muster und possessive Quantifier. JavaScript-Regex ist schlanker, hat aber seit ES2018 wichtige Features wie Named Groups und Lookbehind erhalten.
- Kann Regex HTML parsen?
- Einfache HTML-Snippets lassen sich mit Regex extrahieren, aber für vollständiges HTML-Parsing ist ein dedizierter Parser (z. B. BeautifulSoup in Python oder cheerio in Node.js) deutlich zuverlässiger und sicherer.
- Wie teste ich Regex in meiner Programmiersprache?
- Regex101 unterstützt die Flavors PCRE2, Python, JavaScript, Golang, Java und .NET. Einfach den passenden Flavor im Dropdown wählen, und der Ausdruck wird mit den Regeln der gewählten Sprache ausgewertet.
- Warum matcht mein Ausdruck nicht, obwohl er aussieht wie richtig?
- Häufige Ursachen: vergessene Flags (z. B. kein
ifür case-insensitive), falscher Flavor ausgewählt, oder unerwartete Leerzeichen im Teststring. Regex101 hebt im Debugger-Modus jeden Schritt hervor und zeigt, wo der Match scheitert.
