- 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
Aufgaben Reguläre Ausdrücke
Letzte Lektion von K47. Zeit für die Praxis: zehn Aufgaben wie sie in IHK-Prüfungen für FIAE-Azubis vorkommen können. Die Aufgaben mischen alle Konzepte aus den vorherigen Lektionen: Grundzeichen, Anker und Gruppen, Quantoren, Validierung, Sprachspezifika für Python und JavaScript.
Probier jede Aufgabe erst selbst, bevor du die Lösung aufklappst. Du hast dabei einen kleinen Live-Tester unter manchen Aufgaben – tippe dein Pattern und schau ob die Beispiele matchen. Mehr lernst du dadurch als durch reines Lesen.
1) Vorbereitung: Cheat-Sheet
Ein kompaktes Cheat-Sheet zum Nachschlagen während der Aufgaben. Falls dir etwas entfallen ist – hier nochmal alles wichtige:
2) Aufgabe 1: PLZ mit Stadt
Diese erste Aufgabe ist ein Aufwärmer und zeigt das Grundprinzip: Form-Validierung einer Zeile mit zwei Teilen. Das Schöne daran ist, dass du die wichtigsten Bausteine in einem kompakten Pattern unterbringst – Anker, Zeichenklassen, Quantoren.
PLZ Stadt matched.78462 Konstanz, 10115 Berlin, 04109 Leipzig. Ungültig: 1234 Berlin (zu wenig Ziffern), 78462Berlin (Leerzeichen fehlt), 78462 berlin (klein – wir wollen mit Großbuchstabe beginnen).^– Stringanfang (sonst würde auch Teil-Match gelten)\d{5}– genau 5 Ziffern für die PLZ– das Leerzeichen muss exakt einmal da sein[A-Z]– Stadt beginnt mit Großbuchstabe[a-zäöüß-]+– ein oder mehr Kleinbuchstaben mit Umlauten und Bindestrich$– Stringende
^\d{5} [A-Z][a-zäöüß- ]+$ – Space innerhalb der Stadt erlauben. Aber Vorsicht: das Pattern wird ungenau weil dann auch trailing Spaces matchen können.
3) Aufgabe 2: Telefonnummer extrahieren
Bei der zweiten Aufgabe wechseln wir vom Validieren zum Extrahieren. Achte auf den Unterschied: hier sollen die Treffer aus einem Fließtext gefunden werden – das bedeutet, du brauchst keine Anker. Das ist eine subtile, aber wichtige Unterscheidung die in Prüfungen oft falsch gemacht wird.
0XX-XXXXXXX oder 0XX XXXXXXX (Vorwahl 2-5 Ziffern, Hauptnummer 4-10 Ziffern, Trennzeichen optional Space oder Bindestrich).Kontakt: 030-12345678, mobil 0151-9876543, Service 040 1234567. Erwartet: drei Treffer.0– jede deutsche Festnetznummer beginnt mit 0\d{2,4}– 2-4 weitere Ziffern für die Vorwahl (insgesamt 3-5)[\s-]– Whitespace ODER Bindestrich als Trenner (Zeichenklasse, nicht Quantor!)\d{4,10}– 4-10 Ziffern für die Hauptnummer
^/$ – wir wollen die Nummern im Text finden, nicht den ganzen Text validieren. Erweiterung: (0\d{2,4}|\+49 ?\d{2,4})[\s-]\d{4,10} für internationales Format mit +49. Mehr in L8 Validierung.
4) Aufgabe 3: HTML-Tags zählen
Hier wird's interessanter: HTML enthält öffnende, schließende und attributierte Tags – alle sollen erkannt werden. Diese Aufgabe ist ein klassisches Beispiel wo Greedy-Matching dich in die Falle locken würde (siehe L4). Die Lösung nutzt stattdessen eine negierte Zeichenklasse – sauberer und ohne Backtracking-Risiko.
<p>Text <b>wichtig</b> und <a href="x">Link</a></p> sollte 6 Tags ergeben.<– literales Tag-Öffnen-Zeichen/?– optionaler Slash (für Schluss-Tags)[a-zA-Z]+– Tag-Name(\s[^>]*)?– optional: Space + alles bis vor das Schluss-> (z. B. Attribute)>– Tag-Schluss
<.+> mit greedy Quantor (siehe L4) würde alles zwischen erstem < und letztem > matchen – falsch! Hier nutzen wir die negierte Zeichenklasse [^>]* als Lazy-Ersatz – sauberer und schneller.Wichtige Lehre: für ernsthaftes HTML-Parsing nie Regex nutzen – nimm einen echten Parser (BeautifulSoup, jsoup, …). Diese Aufgabe ist nur fürs Üben.
5) Aufgabe 4: Log-Zeilen filtern
Eine sehr praktische Aufgabe aus dem Admin-Alltag. Kombiniert wird hier Zeit-Filter mit Level-Filter – und das ganze als grep-Befehl. Das ist genau das was du im echten Server-Betrieb ständig brauchst, um Probleme einzugrenzen.
grep-Befehl der alle Zeilen mit ERROR oder FATAL findet, die zwischen 14:00 und 15:59 Uhr passiert sind.2026-05-17 14:32:15 [ERROR] Connection refused. Beispiele: 14:30 [ERROR] ✓, 15:45 [FATAL] ✓, 16:01 [ERROR] ✗ (zu spät), 14:30 [INFO] ✗ (falscher Level).-E– Extended Regex (kompaktere Syntax, siehe L7)1[45]– Stunde 14 oder 15:\d{2}:\d{2}– Minuten und Sekunden\[und\]– literale eckige Klammern (escapen!)(ERROR|FATAL)– Alternation
grep -nE .... Nur Anzahl: grep -cE .... Plus Kontext-Zeilen: grep -A2 -B2 -E ... (2 Zeilen davor und danach). Mehr Tools für Log-Analyse in K46 L7.
6) Aufgabe 5: Datum umformatieren
Eine der häufigsten Praxis-Aufgaben überhaupt: Datumsformate konvertieren. Hier lernst du den eleganten Trick mit Capturing Groups + Backreferences, der dir das Leben rettet. Die Lösung ist einzeilig – und macht trotzdem etwas was du sonst mit String-Manipulation in 10 Zeilen schreiben würdest.
DD.MM.YYYY) zu ISO-Format (YYYY-MM-DD) umwandelt."Geburtsdatum: 17.05.2026" wird zu "Geburtsdatum: 2026-05-17". Funktion soll alle Vorkommen im Text ersetzen.r"..."– Raw-String für Regex! (siehe L5)(\d{2})\.(\d{2})\.(\d{4})– drei Gruppen für Tag/Monat/Jahr, Punkte mit\.escapedr"\3-\2-\1"– Ersatz mit Backreferences: Gruppe 3 zuerst, dann 2, dann 1re.sub()– ersetzt alle Vorkommen
text.replace(/(\d{2})\.(\d{2})\.(\d{4})/g, "$3-$2-$1").
7) Aufgabe 6: IP-Adressen aus Logs
Diese Aufgabe zeigt die echte Stärke der Unix-Philosophie: kleine Werkzeuge die zusammen Großes leisten. Die Lösung ist eine Pipeline aus vier Befehlen – jeder davon tut nur eine Sache, aber im Zusammenspiel löst du damit eine komplexe Log-Analyse in einer einzigen Zeile. Genau so arbeiten Sysadmins jeden Tag.
192.168.1.42 - - [17/May/2026] "GET /index.html". Output soll sein: 50 192.168.1.42, 23 10.0.0.5, … – die Zahl ist der Count.grep -oE 'pattern' access.log– nur den Match ausgeben (-o), nicht ganze Zeile. ERE-Syntax (-E).[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}– einfaches IPv4-Pattern. Achtung: matched auch ungültige wie999.999.999.999– für reine Extraktion ok.sort– alphabetisch sortieren (Voraussetzung für uniq)uniq -c– Duplikate entfernen UND zählen (Count vorne)sort -rn– numerisch reverse sortieren (höchste Counts zuerst)
| head -n 10 anhängen. Strenge IP-Validierung mit Range 0-255 siehe L8.
8) Aufgabe 7: E-Mail-Liste extrahieren und gruppieren
Bei dieser Aufgabe geht es nicht nur ums Finden – die Treffer sollen strukturiert verarbeitet werden. Hier kombinierst du Regex mit JavaScript-Datenstrukturen. Capturing Groups werden zur Brücke zwischen Pattern und Code: die Gruppen geben dir die Teile, die du dann in dein Objekt sortierst.
{ domain: [user1, user2, …] }."Hi anna@firma.de, bob@example.com, clara@firma.de, dave@example.com". Output: {firma.de: ["anna","clara"], example.com: ["bob","dave"]}.([\w.+-]+)– Gruppe 1: lokaler Teil der E-Mail@– wörtliches @-Zeichen([\w.-]+\.\w+)– Gruppe 2: Domain mit Punkt/g-Flag: alle Treffer suchenexec()in Schleife: holt einen Match pro Aufruf, mit Gruppen- Match-Objekt: [0]=ganzer Match, [1]=lokal, [2]=Domain
matchAll() (siehe L6):
9) Aufgabe 8: Eingabevalidierung Username
Jetzt wird's ernst. Diese Aufgabe braucht Lookaheads – die Königsdisziplin der Regex. Mehrere unabhängige Bedingungen werden in einem Pattern kombiniert. Wenn du dir hier alleine die Lösung erarbeitest, hast du Regex wirklich verstanden. Lass dir Zeit damit.
anna_42, BobSmith, user-name123. Ungültig: 42anna (Ziffer am Anfang), anna_ (endet mit Underscore), anna--bob (doppelter Bindestrich), an (zu kurz).^– Anfang[a-zA-Z]– erstes Zeichen muss Buchstabe sein(?!.*[_-]{2})– negativer Lookahead: ab hier darf nirgendwo zweimal_oder-hintereinander stehen[a-zA-Z0-9_-]{1,18}– 1-18 erlaubte Zeichen in der Mitte[a-zA-Z0-9]– letztes Zeichen muss Buchstabe oder Ziffer sein (kein _ oder -)$– Ende- Insgesamt: 1 (Anfang) + 1-18 (Mitte) + 1 (Ende) = 3-20 Zeichen ✓
_--Folgen verbieten. Siehe auch L3 Anker und Gruppen für Lookahead-Details.Test-Cases:
10) Aufgabe 9: SQL-Suche
Die vorletzte Aufgabe verbindet zwei Welten: SQL und Regex. In Datenbanken haben Backslashes eine besondere Tücke – sie werden vom String-Parser und der Regex-Engine ausgewertet. Das führt zu den berüchtigten doppelten Backslashes. Achte auf den Performance-Hinweis am Ende – das ist Prüfungs-relevant.
users mit der Spalte email. Schreibe zwei SQL-Queries: (a) alle gültigen E-Mails finden, (b) alle Adressen mit Wegwerf-Domain (mailinator.com, tempmail.com, 10minutemail.com) finden.\\. wird zu \. für den Regex.Erklärung (b):
@– literales At-Zeichen(mailinator|tempmail|10minutemail)– Alternation der bekannten Wegwerf-Anbieter\\.– escaped Punktcom$– endet mit "com"
LIKE formulierbar und potenziell index-fähig:
11) Aufgabe 10: CSV-Spaltentausch
Letzte Aufgabe – und eine echte Praxis-Klassikerin. Du bekommst eine CSV-Datei und musst Spalten umordnen. Mit Regex und sed geht das in einer Zeile. Die Schönheit: das Pattern nutzt eine negierte Zeichenklasse statt Lazy-Quantor – das ist der elegante Profi-Weg den du jetzt verstehen solltest.
Nachname,Vorname,Alter sollen Vor- und Nachname getauscht werden zu Vorname Nachname,Alter.Müller,Anna,28, Schmidt,Bob,35. Ausgabe: Anna Müller,28, Bob Schmidt,35. Funktioniere für ganze Datei.-E– Extended Regex (für Klammern ohne Backslash)s/.../.../– Substitute-Befehl^– Zeilenanfang([^,]+)– Gruppe 1: Zeichen die nicht Komma sind (= Nachname),– literales Komma([^,]+)– Gruppe 2: Vorname,– Komma vor dem Alter\2 \1,– Ersatz: Vorname (Gruppe 2), Space, Nachname (Gruppe 1), Komma- Der Rest der Zeile (Alter) bleibt unverändert weil er nicht im Pattern ist
[^,]+ als Lazy-Ersatz – sauberer als .+?, weil keine Backtracking-Risiken (siehe L4).Erweiterung mit awk als Alternative (oft lesbarer für CSV):
12) Bonus: IHK-Wissensfragen
Neben Pattern-Aufgaben kommen in IHK-Theorieprüfungen auch Wissensfragen vor, bei denen du Konzepte erklären sollst. Hier die typischen Fragen mit Kurzantworten – versuch erst selbst zu antworten, bevor du in die rechte Spalte schaust.
| Frage | Antwort |
|---|---|
Was ist der Unterschied zwischen + und *? | + = mindestens einmal, * = beliebig oft (auch null) |
Was bedeutet ? nach einem Quantor? | Macht den Quantor lazy (faul) statt greedy (gierig) |
Wofür braucht man ^ und $? | Anker für String-/Zeilenanfang und -ende. Wichtig bei Validierung. |
| Was sind Capturing Groups? | In (...) eingeschlossene Teile, deren Match später als $1, \1 referenziert werden kann |
Wann nutzt man (?:...)? | Wenn man nur gruppieren will, aber nicht capturen (z. B. für Quantor auf Gruppen). Spart Speicher und macht klar dass die Gruppe nur strukturell ist. |
| Was ist katastrophales Backtracking? | Exponentielle Laufzeit bei verschachtelten Quantoren wie (a+)+. Sicherheitsrisiko (ReDoS). |
| Warum „Raw-Strings" in Python? | Damit Backslashes nicht doppelt geschrieben werden müssen. r"\d" statt "\\d". |
| Unterschied LIKE vs. REGEXP in SQL? | LIKE: Standard, Wildcards % und _, einfach. REGEXP: DB-spezifisch, volle Regex-Macht, langsamer. |
13) Letzte Tipps für die Prüfung
Wenn du in einer Prüfung mit Regex konfrontiert wirst, gibt es ein paar Tricks die dir das Leben erleichtern. Diese Liste ist destilliert aus dem was die häufigsten Anfängerfehler sind:
- Lies die Aufgabe genau: was muss matchen, was nicht? Beispiele geben oft die Lösung schon hin.
- Anker nicht vergessen: bei Validierung immer
^...$, bei Suche meist nicht. - Escape die Sonderzeichen:
.ist Metazeichen, escape mit\.wenn wörtlich gemeint. - Greedy vs. Lazy: wenn du „zwischen" zwei Markierungen matchen willst, oft lazy oder negierte Klasse.
- Step-by-Step: erst das einfachste Pattern, dann verfeinern – nicht alles auf einmal.
- Auf Papier durchgehen: bei Verständnisfragen das Pattern Zeichen für Zeichen erklären können.
- Im Zweifel pragmatisch: lieber einfaches Pattern das 99% abdeckt als perfekt-aber-falsch.
14) Was als nächstes?
Mit diesen 10 Lektionen hast du eine solide Regex-Basis. Aber Regex sind eines dieser Werkzeuge die mit jahrelanger Praxis besser werden – nicht durch noch mehr Theorie. Hier ein paar Empfehlungen zur Vertiefung:
- Übung, Übung, Übung: regex101.com und regexr.com haben unendlich viele Übungen. Regex Crossword ist sogar ein Spiel.
- Eigene Use-Cases: nächstes Mal wenn du in einem Editor „Suchen und Ersetzen" machst – kannst du Regex nutzen? Probier's aus.
- Vertiefung mit Mastering Regular Expressions (Buch von Jeffrey Friedl) – die Bibel.
- NFA und DFA: die Theorie hinter Regex-Engines verstehen. Russ Cox' Artikel sind ein Klassiker.
- Mit Logs üben: nimm echte Logs und versuche Patterns zu schreiben. K46 L7 Logging hat passende Beispiele.
- Mit deinen Sprachen intensivieren: Python, JavaScript, Java.
Zusammenfassung
10 IHK-typische Aufgaben durchgegangen – von EASY (PLZ, Telefon) bis HARD (Username-Validierung mit Lookahead, SQL-REGEXP, CSV-sed). Wichtige Techniken: Anker bei Validierung (sonst Teil-Matches), Capturing Groups + Backreferences für Umformatierung, negierte Klassen als saubere Lazy-Alternative, Lookahead für mehrere unabhängige Bedingungen. Prüfungstipps: Anker nicht vergessen, Metazeichen escapen, Step-by-Step bauen, im Zweifel pragmatisch (99% statt perfekt). Für die Vertiefung: regex101.com, regexr.com, Regex Crossword – Übung schlägt Theorie.
