- 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
Was sind Reguläre Ausdrücke?
Stell dir vor du sollst aus einer Datei mit 10.000 Zeilen alle E-Mail-Adressen extrahieren. Oder in einer großen Code-Basis alle Stellen finden wo eine Telefonnummer im Format +49 30 12345678 vorkommt. Oder eine Eingabe prüfen ob sie wirklich ein gültiges Datum ist. Mit normalen String-Funktionen wie indexOf oder contains wirst du da nicht weit kommen – das wären stundenlange manuelle Such-Skripte.
Die Lösung heißt Reguläre Ausdrücke, kurz Regex. Sie sind eine eigene Mini-Sprache zum Beschreiben von Mustern in Text. Statt zu sagen „suche das Wort 'Berlin'" sagst du „suche alle Ziffernfolgen die mit 030- anfangen". Statt zu sagen „die ersten 3 Zeichen müssen Buchstaben sein" sagst du ^[A-Z]{3}. Sehr kompakt, sehr mächtig – aber am Anfang etwas kryptisch.
Diese Lektion zeigt dir was Regex sind, wofür man sie braucht, und gibt dir einen interaktiven Tester mit dem du sofort experimentieren kannst. Die Konzepte gelten universell: Python, JavaScript, Java, Bash, sogar SQL – fast jede Sprache unterstützt Regex.
1) Die Grundidee
Ein regulärer Ausdruck ist ein Muster, kein konkreter Text. Beim Anwenden auf einen Text findet die Regex-Engine alle Stellen die zu diesem Muster passen. Vergleich:
- Normale String-Suche: „Finde 'Berlin'" → findet nur exakt das Wort „Berlin"
- Regex-Suche: „Finde
B\w+" → findet jedes Wort das mit „B" anfängt (Berlin, Bonn, Bremen, Bayreuth, Bug, ...)
Die Mächtigkeit kommt von der Mustersprache: \d steht für „eine Ziffer", \w für „ein Wortzeichen", + für „eine oder mehr", * für „null oder mehr", ? für „optional", und so weiter. Damit baust du beliebig komplexe Muster auf.
Analogie: Wie eine erweiterte Suche im Texteditor. Statt nur „exakt diesen Text finden" kannst du sagen „finde alles was so aussieht". Wer schon mal die Wildcard *.txt in Datei-Dialogen benutzt hat: das ist die ganz primitive Vorstufe. Regex ist die Vollversion mit hundertfach mehr Ausdruckskraft.
2) Dein erstes Regex-Lab
Experimentieren ist der schnellste Weg Regex zu verstehen. Tippe ein Muster oben und einen Testtext unten – jedes Match wird sofort grün hervorgehoben. Probiere die Beispiele aus, die unter dem Tester verlinkt sind:
(unclosed) wird die Fehlermeldung rot angezeigt. Die Flags rechts steuern Verhalten: g = global (alle finden), i = case-insensitive, m = multiline. Mehr zu Flags in L2 und L6.3) Anatomie eines Patterns
Das Muster \b[A-Z]\w+ aus dem Standard-Beispiel oben hat drei Teile. Lies sie von links nach rechts:
\b– ein „Wortgrenze". Markiert die Stelle zwischen einem Wort-Zeichen und einem Nicht-Wort-Zeichen.[A-Z]– ein Großbuchstabe A-Z (genau eines).\w+– ein oder mehrere Wortzeichen (Buchstaben, Ziffern, Unterstrich).
Zusammen: „finde an einer Wortgrenze einen Großbuchstaben gefolgt von einem oder mehreren Wortzeichen". Im Test-Satz findet das „Anna", „Berlin", „Bob", „München", „Die", „Stadt", „München", „Bayern" – alle großgeschriebenen Wörter.
Die einzelnen Bausteine lernst du in L2 Grundzeichen systematisch. Das Wichtigste vorab:
| Pattern | Bedeutung | Beispiel-Match |
|---|---|---|
. | Beliebiges Zeichen (außer Zeilenumbruch) | a, X, 5, , ... |
\d | Ziffer (0-9) | 0, 5, 9 |
\w | Wortzeichen (a-z, A-Z, 0-9, _) | a, Z, 5, _ |
\s | Whitespace (Space, Tab, Newline) | , Tab, \n |
[abc] | Eines von a, b oder c | a, b oder c |
[a-z] | Buchstabe von a bis z | jeder Kleinbuchstabe |
+ | Eins oder mehr (vorheriges Element) | aa, aaa, ... |
* | Null oder mehr | leer, a, aa, ... |
? | Optional (null oder eins) | leer oder a |
{3} | Genau 3-mal | aaa |
{2,5} | 2 bis 5-mal | aa, aaa, ..., aaaaa |
^ / $ | Zeilen-Anfang / -Ende | Position, kein Zeichen |
| | Oder | ja|nein matched beides |
4) Wofür braucht man Regex?
Regex sind nicht akademisch – sie sind ein Werkzeug für ganz konkrete Aufgaben im IT-Alltag. Hier die häufigsten Anwendungsfälle:
/users/:id/orders/:orderId sind Regex unter der Haube. Express, Flask, Spring, alle.5) Eine kurze Geschichte
Regex sind kein neues Erfindungsspielzeug – sie haben eine spannende Vergangenheit, die ihre Mächtigkeit erklärt:
qed – die erste praktische Software-Anwendung.grep für Unix. Der Name kommt von „Global Regular Expression Print" – grep durchsucht Dateien nach Regex-Mustern. Mehr in L7.m/.../-Syntax. Perl-Regex (PCRE) werden zum De-Facto-Standard für moderne Regex-Engines.6) Die zwei Phasen jedes Regex-Einsatzes
Egal in welcher Programmiersprache: ein Regex-Einsatz besteht immer aus zwei Schritten:
- Pattern definieren: das Muster als String oder Literal schreiben (z.B.
"^\\d{5}$"in Python oder/^\d{5}$/in JavaScript). - Pattern anwenden: Test, Suche, Ersetzung – mit einer Sprach-spezifischen Funktion.
Die Anwendungs-Operationen sind in allen Sprachen ähnlich:
- Test (boolean): passt das Muster auf den Text? (z.B.
re.match()in Python,.test()in JS) - Search (Position): wo passt es? Gibt Index oder Match-Objekt zurück
- Find All: alle Treffer als Liste/Array
- Replace: Treffer durch Ersatz ersetzen
- Split: Text am Muster aufteilen
Konkrete Syntax pro Sprache schauen wir in L5 Python und L6 JavaScript an.
7) Wann Regex – wann nicht?
Regex sind mächtig, aber kein Allheilmittel. Es gibt Aufgaben für die sie ideal sind, und Aufgaben wo man sie nicht nutzen sollte:
Regex sind gut für:
- Validierung einfacher Formate (Zahlen, Datum, PLZ, IBAN)
- Extraktion strukturierter Daten aus Text
- Such-und-Ersetz-Operationen mit Pattern
- Log-Filter und schnelle Datenexploration
- URL-Routing in Web-Frameworks
Regex sind schlecht für:
- HTML/XML parsen: dafür gibt's richtige Parser (BeautifulSoup, jsoup, etc.). Regex auf HTML ist anfällig für jeden Sonderfall.
- JSON parsen: nimm einen JSON-Parser. Punkt.
- Komplexe Grammatiken: Programmcode parsen geht mit Regex bis zu einem gewissen Punkt, danach braucht es einen echten Parser/Lexer.
- Sehr lange Texte mit backtracking-anfälligen Mustern – kann zu katastrophalem Backtracking und Programm-Hang führen. ReDoS-Angriffe nutzen das.
Das berühmteste Stack-Overflow-Zitat dazu: „Now they have two problems." Wer ein Problem hat und denkt, mit Regex zu lösen, hat oft zwei Probleme – das Original und das Regex-Verstehen.
8) Drei kleine Beispiele für den Anfang
Damit du ein Gefühl bekommst was Regex praktisch tut, drei Mini-Beispiele die du im Lab oben sofort ausprobieren kannst:
Beispiel 1: alle Zahlen finden. Pattern \d+ auf Text „42 + 13 = 55. Heute ist der 17.05.2026" findet alle Ziffernfolgen: 42, 13, 55, 17, 05, 2026.
Beispiel 2: alle Vokale zählen. Pattern [aeiouAEIOU] mit Flag g auf einen Text findet jeden Vokal einzeln. Dann zählst du die Treffer = Anzahl Vokale. Das wäre mit reiner Schleifen-Logik viel länger.
Beispiel 3: E-Mails extrahieren. Pattern \w+@\w+\.\w+ findet einfache E-Mail-Adressen. Die echte E-Mail-Regex ist viel komplizierter (mehr in L8), aber für den Anfang reicht das.
9) Regex sind tricky – das ist normal
Eine wichtige Botschaft: Regex sind anfangs schwer. Wenn dein erstes Muster nicht funktioniert: das ist normal. Wenn du nach 10 Minuten noch nicht verstehst warum es nicht matched: auch normal. Selbst erfahrene Entwickler nutzen Regex-Tester wie regex101.com oder regexr.com – mit Live-Erklärung jedes Zeichens. Diese Tools sind nicht für Anfänger, sondern für alle.
Drei Tipps für den Anfang:
- Klein anfangen: schreibe das Muster Stück für Stück. Erst die Grundstruktur, dann Verfeinerungen.
- Im Tester ausprobieren: nicht im Code-Editor blind tippen. Erst funktionierendes Muster, dann in den Code übertragen.
- Bestehende Patterns kopieren: für E-Mail, IP, IBAN gibt's bewährte Patterns. Nicht das Rad neu erfinden – mehr dazu in L8.
Zusammenfassung
Reguläre Ausdrücke sind eine Mini-Sprache für Text-Muster: statt exakter Strings findest du Muster wie „5 Ziffern" oder „beliebiges Wort mit @". Basis-Zeichen: \d, \w, \s, ., [abc], Quantoren + * ?, Anker ^ $. Typische Einsätze: Validierung, Extraktion, Log-Analyse, Suchen+Ersetzen. Funktioniert in fast jeder Sprache gleich – Konzepte sind universell, nur die API unterscheidet sich. Nicht für HTML/JSON-Parsing nutzen.
