- 1 Section
- 10 Lessons
- unbegrenzt
- Reguläre Ausdrücke & Textverarbeitung10
- 1.1Was sind Reguläre Ausdrücke?
- 1.2Grundzeichen: Literale, Zeichenklassen, Quantoren
- 1.3Anker, Gruppen und Alternation
- 1.4Gierige vs. faule Quantoren
- 1.5Regex in Python: re-Modul
- 1.6Regex in JavaScript
- 1.7grep, sed, awk – Regex auf der Kommandozeile
- 1.8Regex für Validierung: E-Mail, IP, PLZ, Datum
- 1.9Regex in Datenbanken: LIKE, REGEXP
- 1.10Aufgaben Reguläre Ausdrücke
Grundzeichen: Literale, Zeichenklassen, Quantoren
Nach dem Überblick in L1 gehen wir in die Bausteine. Diese Lektion ist quasi das Vokabel-Training für Regex: du lernst jedes einzelne Zeichen und seine Bedeutung. Anschließend kannst du selbst Muster zusammenbauen. Wir teilen die Bausteine in drei Kategorien: Literale (echte Zeichen), Zeichenklassen (Auswahl-Mengen) und Quantoren (wie oft).
Plan dir 30 Minuten ein und experimentiere im Lab unten – das ist effektiver als nur lesen. Die Konzepte gelten überall: Python, JavaScript, Java, Bash-Tools, SQL.
1) Literale: das Selbstverständliche zuerst
Der einfachste Baustein: ein normales Zeichen matched genau sich selbst. Das Pattern Berlin findet jedes Vorkommen des Wortes „Berlin" im Text. Das Pattern abc findet die Buchstabenfolge „abc" – das ist Literal-Matching. So weit, so banal.
Der Witz: die meisten Zeichen sind Literale. Buchstaben, Ziffern, viele Sonderzeichen werden 1:1 gesucht. Aber es gibt eine Handvoll Sonderzeichen die eine spezielle Bedeutung haben:
Diese 14 Zeichen sind die Metazeichen. Wenn du sie wörtlich suchen willst (z.B. einen echten Punkt im Text), musst du sie escapen mit einem vorangestellten Backslash:
.matched JEDES Zeichen (Metazeichen)\.matched einen echten Punktwww\.example\.comfindet exakt „www.example.com"
192.168.1.1 matched leider auch 192X168Y1Z1 – die Punkte sind „jedes Zeichen". Richtig: 192\.168\.1\.1. In Programmiersprachen wo das Pattern als String steht, brauchst du oft doppelte Backslashes weil der String selbst Backslash escapen muss.2) Zeichenklassen: Auswahl-Mengen
Statt einzelne Zeichen zu listen kannst du Mengen beschreiben. Damit wird Regex erst richtig mächtig. Die einfachste Form sind eckige Klammern: [abc] matched genau eines der Zeichen a, b oder c. Wie ein „ODER" für einzelne Zeichen.
In eckigen Klammern kannst du auch Bereiche mit Bindestrich definieren:
[a-z]– jeder Kleinbuchstabe[A-Z]– jeder Großbuchstabe[0-9]– jede Ziffer[a-zA-Z]– jeder Buchstabe (mehrere Bereiche)[a-zA-Z0-9_]– Wortzeichen
Mit einem Caret (^) am Anfang der Klasse negierst du sie:
[^abc]– jedes Zeichen außer a, b oder c[^0-9]– jedes Nicht-Ziffer-Zeichen
Und es gibt vordefinierte Zeichenklassen für häufige Fälle – die solltest du auswendig kennen:
\d↔\D, \w↔\W, \s↔\S. Vereinfacht die Schreibarbeit enorm.3) Klassen-Builder
Spiel mit dem Klassen-Builder: klick mehrere Optionen an um eine maßgeschneiderte Zeichenklasse zu bauen. Im Output siehst du die zusammengesetzte Klasse und wie sie auf den Test-Text wirkt:
[...] haben übrigens die meisten Metazeichen ihre Spezialbedeutung VERLOREN – ein Punkt in eckigen Klammern [.] ist tatsächlich ein Punkt, kein „beliebiges Zeichen". Ausnahmen: ^ am Anfang (Negation), - zwischen Zeichen (Bereich), \ (Escape).4) Quantoren: wie oft soll matched werden?
Bisher matched jedes Element genau ein Zeichen. Aber wir wollen oft Wiederholungen: „ein oder mehr Ziffern", „beliebig viele Buchstaben", „genau 5 Zeichen". Dafür gibt es Quantoren – sie stehen hinter dem zu wiederholenden Element:
a)ab+ wird nur das b wiederholt – „ab", „abb", „abbb". Bei (ab)+ wird die ganze Gruppe wiederholt – „ab", „abab", „ababab". Gruppen lernen wir in L3. Vorsicht: * erlaubt auch leere Matches – das kann zu Endlos-Schleifen führen wenn die Regex-Engine das nicht erkennt. Mehr zu Quantor-Verhalten in L4 (Gierig vs. Faul).5) Quantoren kombinieren: erste echte Patterns
Jetzt wird's spannend. Mit Zeichenklassen + Quantoren baust du fast jedes nützliche Pattern. Beispiele:
| Pattern | Beschreibung | Findet |
|---|---|---|
\d+ | Eine Ziffernfolge | 42, 100, 2026, … |
\d{4} | Genau 4-stellige Zahl | 2026, 1995, … |
\d{2,4} | 2- bis 4-stellige Zahl | 12, 123, 1234 |
[a-zA-Z]+ | Ein oder mehr Buchstaben | Hallo, ABC, Welt |
[A-Z]\w* | Großbuchstabe + beliebige Wortzeichen | Berlin, X42, Anna |
\s+ | Eine oder mehr Whitespace-Zeichen | " ", " ", " \t" |
[a-z]{3,} | Mindestens 3 Kleinbuchstaben | abc, hallo, … |
colou?r | color oder colour | color, colour |
https?:// | http:// oder https:// | http://, https:// |
\d{1,3}(\.\d{1,3}){3} | IPv4-Format (ungefähr) | 192.168.1.1 |
Die letzte Zeile zeigt schon ein Gruppen-Konstrukt mit (\.\d{1,3}){3} – das wiederholt eine ganze Gruppe dreimal. Sehr mächtig, kommt in L3.
6) Der Punkt: das beliebige Zeichen
Das beliebteste Metazeichen ist der Punkt .. Er matched ein einzelnes beliebiges Zeichen – außer dem Zeilenumbruch (Newline). Mit dem Flag s (single-line oder dotall) matched er auch Newlines, aber das ist Sprach-abhängig.
Praktische Anwendungen:
.+– „mindestens ein Zeichen". Wie\w+, aber auch Sonderzeichen und Spaces..{8,}– „mindestens 8 Zeichen" (klassische Passwort-Mindestlänge)a.c– a, irgendwas, c. Findet abc, aXc, a5c, ...2026-..-..– Datum im ISO-Format aus 2026 mit beliebigen Monat/Tag
Wichtig: in Programmiersprachen wo das Pattern als String steht, musst du den Backslash oft doppeln. \d im Pattern wird in Java als "\\d" geschrieben, in Python kannst du Raw-Strings nutzen: r"\d" – kein doppelter Backslash nötig. Mehr dazu in L5 Python.
7) Häufige Anfänger-Fallen
Hier sammeln wir Probleme die jeder mindestens einmal erlebt. Wenn du auf eine triffst – das ist normal:
- Vergessenes Escape:
file.txtals Pattern findet auch „fileXtxt". Punkt escapen:file\.txt. - Greedy-Matching:
<.+>auf<b>Hallo</b>matched die ganze Zeile inklusive der mittleren Tags – nicht nur das erste Tag. Mehr in L4. - Falscher Quantor:
\d*matched auch leere Strings – wenn du wirklich „mindestens eine Ziffer" willst, nimm\d+. - Klasse vs. Klammer:
[abc]= a oder b oder c.(abc)= exakt „abc". Verwechseln! - Backslash in Strings: in Java/JavaScript musst du im String
"\\d"schreiben damit der Regex\dbekommt. Vergessen → Pattern ist kaputt. - Anchor vergessen: ohne
^...$matched dein „PLZ"-Pattern\d{5}auch innerhalb längerer Texte. Mehr in L3.
8) Reihenfolge der Lese-Strategie
Beim Lesen fremder Regex hilft eine systematische Vorgehensweise. Schau dir [a-zA-Z]\w{2,15} an:
- Vom linken Rand nach rechts gehen.
- Erstes Element:
[a-zA-Z]– eine Zeichenklasse, matched einen Buchstaben. - Quantor? Keiner direkt dahinter – also genau eines.
- Nächstes Element:
\w– vordefinierte Klasse für Wortzeichen. - Quantor:
{2,15}– zwischen 2 und 15 mal.
Übersetzung: „Ein Buchstabe, gefolgt von 2 bis 15 Wortzeichen". Das ist eine typische Username-Validierung: muss mit Buchstabe anfangen, insgesamt 3-16 Zeichen lang. So gehst du jedes Pattern Schritt für Schritt durch.
9) Zusammenfassende Tabelle
| Konzept | Beispiele | Bedeutung |
|---|---|---|
| Literal | a, B, 5 | Matched sich selbst |
| Escape | \., \\, \+ | Metazeichen wörtlich machen |
| Zeichenklasse | [abc], [a-z], [^0-9] | Auswahl-Menge / Negation |
| Vordef. Klasse | \d, \w, \s, . | Häufige Klassen kompakt |
| Quantor * | a* | Null oder mehr |
| Quantor + | a+ | Eins oder mehr |
| Quantor ? | a? | Optional |
| Quantor {n} | a{3} | Genau n-mal |
| Quantor {n,m} | a{2,5} | n bis m mal |
| Quantor {n,} | a{3,} | Mindestens n-mal |
Zusammenfassung
Drei Bausteinkategorien: Literale (Zeichen die sich selbst matchen) – Vorsicht bei 14 Metazeichen . * + ? | ( ) [ ] { } ^ $ \, mit \ escapen. Zeichenklassen: [abc], [a-z], [^abc], vordefiniert \d/\w/\s mit Großschreibung als Negation. Quantoren: * (0+), + (1+), ? (optional), {n}/{n,m} für genaue Wiederholungen. Quantor wirkt auf das letzte Element – für Gruppen Klammern nutzen. Lesen: links nach rechts, jedes Element + Quantor benennen.
