Lässt es sich mit cremefarbenem Papier, einer Tönung, mehr Kontrast oder größerer Schrift besser lesen? Wählen Sie Ihre Farben und Ihre Schrift, einmalig für alle Seiten.

Kostenlose Lektion

Reguläre Ausdrücke und grep

Nach dieser Lektion: Ich kann einen regulären Ausdruck schreiben und mit grep testen.

Lektion, 55 Min.6 BefehleLab für Compilerbau und Rechnerarchitektur: gcc, flex, bison und RISC-V in einer VM

Rechnungsnummern in tausend Zeilen finden

Ein regulärer Ausdruck (englisch regular expression, kurz Regex) ist ein Muster, das beschreibt, wie ein Text aussehen darf. Mit ihm finden Sie zum Beispiel alle Rechnungsnummern in einer Datei mit tausend Zeilen, ohne jede Zeile zu lesen.

Das Werkzeug grep sucht solche Muster. Dieselben Muster stecken in den Suchfeldern von Editoren und in den Lexern von Compilern. In dieser Lektion schreiben Sie sie selbst und sehen, was sie nicht können.

Am Ende dieser Lektion

Notiz

Ich kann einen regulären Ausdruck schreiben und mit grep testen.

Schlüsselwörter

BegriffWas er bedeutetBeispiel
Regulärer Ausdruckein Muster für eine Menge von Texten[0-9]+
Zeichenklasseeine Auswahl von Zeichen für eine Stelle[A-Z]
Wiederholungein Zeichen, das sagt, wie oft ein Baustein vorkommt+
Ankerein Zeichen für den Anfang oder das Ende einer Zeile^
Trefferein Text, auf den das Muster passt
Reguläre Spracheeine Sprache, die ein regulärer Ausdruck beschreibt

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Ein Muster besteht aus wenigen Bausteinen

Ein Buchstabe im Muster passt auf genau diesen Buchstaben. Eine Zeichenklasse wie [A-Z] passt auf einen beliebigen Großbuchstaben.

Eine Wiederholung sagt, wie oft: + heißt einmal oder öfter, * null Mal oder öfter, ? höchstens einmal. Ein senkrechter Strich | heißt „oder“. Ein Anker ^ steht für den Zeilenanfang und $ für das Zeilenende.

Die Bausteine mit je einem Beispiel

BausteinBedeutungMusterPasst auf
[A-Z]ein Großbuchstabe[A-Z][0-9]B7
[0-9]eine Ziffer[0-9][0-9]42
+einmal oder öfter[0-9]+7 und 2026
*null Mal oder öfterab*a und abbb
?höchstens einmalab?a und ab
|odertee|kaffeetee und kaffee
^ und $Anfang und Ende der Zeile^[0-9]+$nur Ziffern

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Eine Regel von Hand, dann als Muster

Code: python
# Wir pruefen Artikelnummern wie AB-123 von Hand: zwei Buchstaben, Strich, Ziffern.
nummern = ["AB-123", "A-1", "AB123", "ab-123", "AB-"]
for nummer in nummern:
    ok = False
    if len(nummer) >= 4 and nummer[0].isupper() and nummer[1].isupper():
        if nummer[2] == "-" and nummer[3:].isdigit():
            ok = True
    print(nummer, ok)
# Das Muster [A-Z][A-Z]-[0-9]+ sagt dasselbe in einer Zeile.
# Aendern Sie die Liste und pruefen Sie, welche Nummern durchkommen.

Ein häufiger Fehler

Warnung

Viele denken, * heiße „irgendein Text“, wie bei der Dateisuche *.txt. In einem regulären Ausdruck wiederholt * aber den Baustein davor. ab* passt auf abbb. Für „irgendein Text“ schreiben Sie .*.

grep -E sucht Zeilen, die zum Muster passen

Der Befehl grep -E muster liest Zeilen und gibt die aus, in denen das Muster einen Treffer hat. Die Option -E schaltet die Bausteine oben ein.

Mit printf und einer Pipe geben Sie grep eigene Zeilen. Sie wissen so genau, was hineingeht, und können vorher sagen, was herauskommt.

Nummern mit Buchstabe und Ziffern

Befehl
printf 'A12\nB7\nab3\nA123\nC\n' | grep -E '^[A-Z][0-9]+$'

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Dieselben Treffer nur zählen

Befehl
printf 'A12\nB7\nab3\nA123\nC\n' | grep -cE '^[A-Z][0-9]+$'

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Den Betrag mit Komma ausschneiden

Befehl
echo 'Rechnung 2026-10-26 Betrag 49,90' | grep -oE '[0-9]+,[0-9]{2}'

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Das Datum ausschneiden

Befehl
echo 'Rechnung 2026-10-26 Betrag 49,90' | grep -oE '[0-9]{4}-[0-9]{2}-[0-9]{2}'

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Ein Muster kann nicht zählen

Ein regulärer Ausdruck beschreibt genau die Sprachen, die ein endlicher Automat erkennt. Beide haben nur endlich viele Zustände und können sich also nur endlich viel merken.

Darum kann kein Muster prüfen, ob gleich viele a wie b vorkommen. Dazu müsste es beliebig weit zählen. Das Muster a+b+ lässt aabb und aaabb durch, ohne die Anzahl zu vergleichen.

Muster a+b+ auf vier Zeilen

Befehl
printf 'ab\naabb\naaabb\nabab\n' | grep -E '^a+b+$'

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Muster (ab)+ auf dieselben Zeilen

Befehl
printf 'ab\naabb\naaabb\nabab\n' | grep -E '^(ab)+$'

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Über dieses Lab und seinen Quellcode: Lab für Compilerbau und Rechnerarchitektur: gcc, flex, bison und RISC-V in einer VM

Sie unterrichten eine Gruppe? Weisen Sie dieses Modul Ihren Studierenden zu, mit Handbuch für Lehrende, automatisch geprüften Aufgaben und einem Lab für jede Person.