Reguläre Ausdrücke (Regex): Der komplette Guide
Regex ist ein mächtiges Werkzeug für Textverarbeitung. Von E-Mail-Validierung bis zur Log-Analyse – wer Regex beherrscht, spart viel Zeit.
Was sind Reguläre Ausdrücke?
Reguläre Ausdrücke (Regular Expressions, Regex) sind Muster, die Zeichenketten beschreiben. Sie werden verwendet für:
- Suchen und Ersetzen in Texten
- Validierung von Eingaben (E-Mail, Telefon, etc.)
- Datenextraktion aus Texten
- Log-Analyse
Grundlegende Syntax
Literale Zeichen
/hello/ # Findet "hello"
/test123/ # Findet "test123"
Metazeichen
| Zeichen |
Bedeutung |
Beispiel |
. |
Beliebiges Zeichen (außer Newline) |
a.c → abc, aXc |
^ |
Zeilenanfang |
^Hello |
$ |
Zeilenende |
end$ |
\ |
Escape-Zeichen |
\. → Punkt literal |
| |
Oder |
cat|dog |
Zeichenklassen
| Klasse |
Bedeutung |
[abc] |
a, b oder c |
[^abc] |
Nicht a, b oder c |
[a-z] |
Kleinbuchstaben a-z |
[A-Z] |
Großbuchstaben A-Z |
[0-9] |
Ziffern 0-9 |
[a-zA-Z0-9] |
Alphanumerisch |
Vordefinierte Klassen
| Shorthand |
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] |
Whitespace |
\S |
[^ \t\n\r] |
Kein Whitespace |
Quantifizierer
| Quantifizierer |
Bedeutung |
Beispiel |
* |
0 oder mehr |
ab*c → ac, abc, abbc |
+ |
1 oder mehr |
ab+c → abc, abbc |
? |
0 oder 1 |
colou?r → color, colour |
{n} |
Genau n mal |
\d{4} → 2024 |
{n,} |
Mindestens n mal |
\d{2,} → 12, 123, 1234 |
{n,m} |
n bis m mal |
\d{2,4} → 12, 123, 1234 |
Greedy vs. Lazy
# Greedy (Standard) - so viel wie möglich
/a.*b/ in "aXXbYYb" → "aXXbYYb"
# Lazy - so wenig wie möglich
/a.*?b/ in "aXXbYYb" → "aXXb"
Gruppen und Referenzen
# Gruppe
/(ab)+/ # ab, abab, ababab
# Benannte Gruppe
/(?<year>\d{4})-(?<month>\d{2})/
# Rückreferenz
/(\w+)\s+\1/ # Findet "das das", "the the"
# Non-Capturing Group
/(?:ab)+/ # Gruppe ohne Capture
Lookahead und Lookbehind
| Syntax |
Name |
Bedeutung |
(?=...) |
Positive Lookahead |
Gefolgt von |
(?!...) |
Negative Lookahead |
Nicht gefolgt von |
(?<=...) |
Positive Lookbehind |
Vorausgegangen von |
(?<!...) |
Negative Lookbehind |
Nicht vorausgegangen von |
# Passwort: mindestens eine Zahl
/(?=.*\d)/
# Preis ohne € davor
/(?<!€)\d+/
Praktische Beispiele
E-Mail Validierung
/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/
Deutsche Telefonnummer
/^(\+49|0)[1-9]\d{1,14}$/
Postleitzahl (Deutschland)
/^\d{5}$/
URL
/^https?:\/\/[^\s]+$/
Datum (DD.MM.YYYY)
/^(0[1-9]|[12]\d|3[01])\.(0[1-9]|1[0-2])\.\d{4}$/
IP-Adresse (IPv4)
/^(\d{1,3}\.){3}\d{1,3}$/
Regex in verschiedenen Sprachen
JavaScript
const regex = /\d+/g;
const text = "Es gibt 42 Antworten";
// Test
regex.test(text); // true
// Match
text.match(regex); // ["42"]
// Replace
text.replace(/\d+/, "viele"); // "Es gibt viele Antworten"
Python
import re
text = "Es gibt 42 Antworten"
# Suchen
re.search(r'\d+', text) # Match-Objekt
# Alle finden
re.findall(r'\d+', text) # ['42']
# Ersetzen
re.sub(r'\d+', 'viele', text) # "Es gibt viele Antworten"
PHP
$text = "Es gibt 42 Antworten";
// Prüfen
preg_match('/\d+/', $text); // 1
// Alle finden
preg_match_all('/\d+/', $text, $matches);
// Ersetzen
preg_replace('/\d+/', 'viele', $text);
Flags/Modifier
| Flag |
Bedeutung |
i |
Case-insensitive |
g |
Global (alle Treffer) |
m |
Multiline (^ und $ pro Zeile) |
s |
Dotall (. matcht auch \n) |
💡 Tipp:
Nutzen Sie regex101.com zum Testen und Debuggen von Regex mit Erklärungen.
Weitere Informationen