Regex Character Classes

6 Kernkonzepte
Die wichtigsten Zeichenklassen in regulären Ausdrücken: \d · \w · \s · POSIX-Klassen · Unicode-Kategorien · negierte Klassen · Bereichsangaben Zeichenklassen definieren Mengen von Zeichen, die an einer Position matchen können. Sie sind das Herzstück jeder präzisen Regex und ermöglichen sowohl einfache als auch komplexe Suchmuster.

Shorthand Classes – \d, \w, \s

\d · \D · \w · \W · \s · \S
// Vordefinierte Kurzschreibweisen \d // Jede Ziffer (entspricht [0-9]) \D // Keine Ziffer (entspricht [^0-9]) \w // Wortzeichen (entspricht [a-zA-Z0-9_]) \W // Kein Wortzeichen ([^a-zA-Z0-9_]) \s // Leerzeichen (entspricht [ \t\n\r\f\v]) \S // Kein Leerzeichen ([^ \t\n\r\f\v])

Shorthand Classes sind die am häufigsten verwendeten Zeichenklassen. Sie bieten eine kompakte Schreibweise für die gängigsten Zeichengruppen.

Beispiele
# \d = Ziffer
\d{5}12345, 90210 (nur 5-stellige Zahlen)
# \w = Wortzeichen (Buchstaben, Zahlen, Unterstrich)
\w+Hello, world_123, abc123
# \s = Leerzeichen
\s+ → matcht alle Leerzeichen, Tabulatoren, Zeilenumbrüche
# Negierte Klassen
\D+ → matcht alle Nicht-Ziffern (Buchstaben, Sonderzeichen)
\S+ → matcht alle Nicht-Leerzeichen (Wörter ohne Leerzeichen)
Tipp: In einigen Regex-Engines (z.B. Python mit re.ASCII) ist \w auf ASCII beschränkt. Für Unicode-Unterstützung verwenden Sie \p{L} oder die POSIX-Klasse [[:word:]].

POSIX-Klassen – [:alpha:], [:digit:], [:alnum:]

[:alpha:] · [:digit:] · [:alnum:] · [:space:] · [:punct:]
// POSIX-Zeichenklassen (in eckigen Klammern) [[:alpha:]] // Buchstaben (a-z, A-Z, ggf. Umlaute) [[:digit:]] // Ziffern (0-9) [[:alnum:]] // Alphanumerische Zeichen (Buchstaben + Ziffern) [[:space:]] // Leerzeichen (wie \s, aber erweitert) [[:punct:]] // Satzzeichen (.,!?;: etc.) [[:lower:]] // Kleinbuchstaben [[:upper:]] // Großbuchstaben [[:xdigit:]] // Hexadezimalzeichen (0-9, A-F, a-f)

POSIX-Klassen sind in vielen Regex-Engines verfügbar (insbesondere in grep, sed, awk und in C/C++-Bibliotheken). Sie werden innerhalb von [] mit doppelten eckigen Klammern geschrieben.

Beispiele
# Nur Buchstaben
[[:alpha:]]+Hello, Welt, ÄÖÜ
# Alphanumerisch (Buchstaben und Ziffern)
[[:alnum:]]+abc123, Hello42
# Satzzeichen extrahieren
[[:punct:]]+.!?, ,;:
# Negierte POSIX-Klasse
[^[:digit:]]+ → matcht alles außer Ziffern
# Kombination: Buchstaben und Leerzeichen
[[:alpha:][:space:]]+ → matcht Text mit Leerzeichen
Tipp: POSIX-Klassen sind lokalisierungsabhängig. In der C-Locale entsprechen sie ASCII, in anderen Locales können sie auch Umlaute und andere Zeichen umfassen.

Unicode-Kategorien – \p{L}, \p{N}, \p{P}

\p{L} · \p{N} · \p{P} · \p{Lu} · \p{Sc}
// Unicode-Kategorien (PCRE, Perl, Python, JavaScript (ES2018+)) \p{L} // Alle Buchstaben (Lu, Ll, Lt, Lm, Lo) \p{N} // Alle Ziffern (Nd, Nl, No) \p{P} // Satzzeichen (Pc, Pd, Ps, Pe, Pi, Pf, Po) \p{Lu} // Großbuchstaben \p{Ll} // Kleinbuchstaben \p{Sc} // Währungssymbole ($, €, £, ¥) \p{Sm} // Mathematische Symbole (+, =, ∑) \P{...} // Negierte Unicode-Kategorie

Unicode-Kategorien ermöglichen den Zugriff auf alle Zeichen des Unicode-Standards – von Buchstaben und Ziffern über Satzzeichen bis zu mathematischen Symbolen.

Beispiele (PCRE / Python)
# Alle Buchstaben (inkl. Umlaute, griechisch, kyrillisch)
\p{L}+Hello, Welt, Αθήνα, Москва
# Nur Großbuchstaben
\p{Lu}+ABC, XYZ, ÄÖÜ
# Währungssymbole
\p{Sc}$, , £, ¥
# Alles außer Buchstaben
\P{L}+123, !@#, $€
# Kombination: Buchstaben und Ziffern (Unicode)
[\p{L}\p{N}]+ → matcht alphanumerische Zeichen aller Sprachen
Tipp: Unterstützung für \p{...} ist nicht in allen Regex-Engines verfügbar. In JavaScript benötigen Sie das u-Flag, in Python regex-Modul (nicht re) oder re.UNICODE.

Negierte Klassen – Alles außer ...

[^...] · \D · \W · \S · \P{...}
// Negierte Zeichenklassen [^0-9] // Alles außer Ziffern [^a-zA-Z] // Alles außer Buchstaben [^\s] // Alles außer Leerzeichen [^<>] // Alles außer < und > // Shorthand negiert \D // Alles außer Ziffern \W // Alles außer Wortzeichen \S // Alles außer Leerzeichen \P{...} // Alles außer Unicode-Kategorie

Negierte Klassen matchen alle Zeichen, die nicht in der angegebenen Menge enthalten sind. Sie werden mit ^ am Anfang der Klasse definiert.

Beispiele
# Alle Zeichen außer Komma und Punkt
[^,\.]+ → matcht Text ohne , und .
# Alle Zeichen außer HTML-Tags
[^<>]+ → extrahiert Text ohne < und >
# Alles außer Vokalen (Konsonanten)
[^aeiouAEIOU] → matcht Konsonanten
# Negierte Unicode-Kategorie
\P{L} → matcht alle Nicht-Buchstaben
# Kombination: Alles außer Zeilenumbruch
[^\n] → matcht alles außer Zeilenumbruch (ähnlich zu . ohne s-Flag)
Tipp: Negierte Klassen sind besonders nützlich, um bestimmte Zeichen zu exkludieren – z.B. für die Validierung von Benutzereingaben oder das Entfernen unerwünschter Zeichen.

Bereichsangaben – a-z, 0-9, A-Z

[a-z] · [A-Z] · [0-9] · [a-zA-Z] · [0-9a-f]
// Bereichsangaben in eckigen Klammern [a-z] // Kleinbuchstaben a bis z [A-Z] // Großbuchstaben A bis Z [0-9] // Ziffern 0 bis 9 [a-zA-Z] // Alle Buchstaben (groß + klein) [0-9a-f] // Hexadezimal-Ziffern (0-9, a-f) [a-zA-Z0-9] // Alphanumerisch // Sonderfall: Bereich mit Bindestrich [-a-z] // Bindestrich oder a-z (Bindestrich am Anfang) [a-z-] // a-z oder Bindestrich (Bindestrich am Ende)

Bereichsangaben ermöglichen die Definition von Zeichenbereichen mit -. Sie sind die Grundlage für alle benutzerdefinierten Zeichenklassen.

Beispiele
# Nur Kleinbuchstaben
[a-z]+hello, world
# Nur Großbuchstaben
[A-Z]+HELLO, WORLD
# Hexadezimale Zeichen
[0-9a-fA-F]+deadbeef, 0123456789ABCDEF
# Buchstaben und Zahlen (alphanumerisch)
[a-zA-Z0-9]+abc123, Hello42
# Bereich mit Bindestrich (am Anfang oder Ende)
[-a-z0-9]+ → matcht Kleinbuchstaben, Ziffern und Bindestrich
Tipp: Der Bindestrich (-) hat in Zeichenklassen eine Sonderbedeutung. Um ihn als Literal zu verwenden, setzen Sie ihn an den Anfang ([-]) oder an das Ende ([a-z-]) der Klasse.

Praxisbeispiele – Häufige Anwendungen

E-Mail · URL · Telefon · Datum
// Typische Zeichenklassen für die Praxis E-Mail: [\w.-]+@[\w.-]+\.\w+ URL: https?://[\w-]+(\.[\w-]+)+[/\w-]* Telefon (DE): [\d\s/-]+ Datum (YYYY-MM-DD): \d{4}-\d{2}-\d{2} Nur Buchstaben: [a-zA-Z\u00C0-\u00FF]+ Nur Ziffern: \d+

Praxisbeispiele zeigen die Anwendung von Zeichenklassen in realen Szenarien – von der Validierung von Eingaben bis zur Extraktion von Informationen.

Beispiele
# E-Mail-Adresse validieren (einfach)
[\w.-]+@[\w.-]+\.\w+user@example.com
# URL extrahieren
https?://[^\s]+https://example.com
# Deutsche Telefonnummer (vereinfacht)
[\d\s/-]{10,15}030 1234567, +49 30 1234567
# Datum im Format DD.MM.YYYY
\d{2}\.\d{2}\.\d{4}15.03.2025
# Nur Buchstaben (inkl. Umlaute)
[a-zA-ZäöüÄÖÜß]+München, Straße
# Hexadezimale Farbe (#RRGGBB)
#[0-9a-fA-F]{6}#FF0000, #00FF00
Tipp: Diese Beispiele sind vereinfacht und decken nicht alle Randfälle ab. Für produktive Validierungen sollten Sie spezialisierte Bibliotheken oder umfassendere Regex-Muster verwenden.

Character Classes im Überblick

\d Ziffern [0-9]
\D = Nicht-Ziffer
\w Wortzeichen [a-zA-Z0-9_]
\W = Nicht-Wortzeichen
\s Leerzeichen
\S = Nicht-Leerzeichen
[[:alpha:]] Buchstaben (POSIX)
Lokalisierungsabhängig
\p{L} Unicode-Buchstaben
Alle Sprachen
[^...] Negierte Klasse
Alles außer

Quick Summary

\d
Ziffer
[:digit:]
POSIX-Ziffer
\p{N}
Unicode-Ziffer
[^...]
Negierte Klasse
[a-z]
Bereich
[\w.-]+
E-Mail
[\w.-]+@[\w.-]+\.\w+ · \d{4}-\d{2}-\d{2} · [^<>]+