Zum Hauptinhalt springen

← Zurück zum Blog

Reguläre Ausdrücke für Einsteiger: Ein praktischer Spickzettel

Reguläre Ausdrücke sehen aus wie Kauderwelsch, bis die Teile einrasten — dann sind sie eines der nützlichsten Werkzeuge, die du hast. Hier ein einsteigerfreundlicher Spickzettel, den du dir wirklich merken kannst.

Ein echter Durchlauf, samt Gruppen. Wir haben das Muster \b(\d{4})-(\d{2})-(\d{2})\b mit dem g-Flag gegen due 2026-07-27, shipped 2026-08-03 in unserem Regex-Tester laufen lassen. Er meldet 2 match(es) und listet jeden mit seiner Fundposition — #1 "2026-07-27" @4 und #2 "2026-08-03" @24. Zwei Lektionen auf einem Bildschirm: Ohne g-Flag sähest du nur den ersten Treffer, und die drei Klammergruppen sind der Grund, warum du Jahr, Monat und Tag einzeln herausziehen kannst, statt den Treffer hinterher erneut zu zerlegen.

Zeichenklassen

  • . — jedes Zeichen (außer Zeilenumbruch, außer mit s-Flag).
  • \d — eine Ziffer; \D — keine Ziffer.
  • \w — ein Wortzeichen (Buchstabe, Ziffer, Unterstrich); \W — das Gegenteil.
  • \s — Leerraum; \S — kein Leerraum.
  • [abc] — eines von a, b, c. [a-z] — ein Bereich. [^abc] — alles außer a, b, c.

Quantoren (wie viele)

  • * — null oder mehr. + — eins oder mehr. ? — null oder eins (optional).
  • {3} — genau 3. {2,4} — 2 bis 4. {2,} — 2 oder mehr.
  • Ein ? nach einem Quantor macht ihn faul (so wenig wie möglich): .+?.

Greedy gegen lazy ist das Quantoren-Detail, das am meisten Zeit kostet — und es ist eine einzige Messung. Gegen <b>bold</b> and <i>it</i> liefert <.+> 1 Treffer: Es schluckt die ganze Zeichenkette vom ersten < bis zum letzten >. Ein ? mehr, und <.+?> liefert 4 Treffer: #1"<b>"@0 #2"</b>"@7 #3"<i>"@16 #4"</i>"@21. Das ? ändert nicht, was passen kann, nur wie weit .+ reicht, bevor es anhält.

Anker und Grenzen

  • ^ — Anfang des Strings (mit m pro Zeile). $ — Ende.
  • \b — eine Wortgrenze — ideal für ganze Wörter wie \bcat\b.

Offsets machen aus einer Trefferzahl eine Diagnose. Unser Regex-Tester listet jeden Treffer mit seiner Startposition, \d+ gegen Order 12, item 345, qty 7. ergibt also 3 Treffer als

#1"12"@6 #2"345"@15 #3"7"@24

Lies die Zahlen, nicht nur die Zeichenketten: Der dritte Treffer beginnt bei 24, was zeigt, dass die letzte 7 vor dem Punkt gefunden wurde und . somit nicht zu \d gehört. Eine Grenze ändert die Menge vollständig — \b\w{5}\b liefert nur

#1"Order"@0

Ein Treffer bei Offset 0, denn Order ist das einzige allein stehende Wort aus fünf Zeichen.

Gruppen und Alternation

  • ( … ) — eine Capture-Gruppe; der Treffer wird als Gruppe 1, 2, … gemerkt.
  • (?: … ) — eine Gruppe, die nicht captured (nur zur Struktur).
  • a|b — trifft a oder b.

Flags

  • g — alle Treffer finden, nicht nur den ersten.
  • i — Groß-/Kleinschreibung ignorieren.
  • m^ und $ treffen pro Zeile.
  • s. trifft auch Zeilenumbrüche.

Ein paar praktische Muster

  • Nur Ziffern: ^\d+$
  • Ein einfaches Datum: \d{4}-\d{2}-\d{2}
  • Wörter: \b\w+\b
  • Eine grobe E-Mail: [^@\s]+@[^@\s]+\.[^@\s]+

(Echte E-Mail-Validierung ist bekanntlich schwer — ein grobes Muster wie dieses reicht für eine schnelle Prüfung, nicht für RFC-perfekte Validierung.)

Vier Muster, eine unveränderte Testzeichenkette (Order 12, item 345, qty 7.), durch unseren Regex-Tester geschickt. Die Trefferzahl ist die ganze Lektion: Was zurückkommt, entscheidet das Muster, nicht der Text.

MusterGefundene Treffer
\d+3 Treffer
\d{2,}2 Treffer
\b\w{5}\b1 Treffer
[A-Z]\w+1 Treffer

Tipps, die Stunden sparen

  • Baue schrittweise auf. Beginne mit einem kleinen Teil und ergänze, während du die Treffer live verfolgst.
  • Escape Sonderzeichen, die du wörtlich meinst: \., \?, \(.
  • Vorsicht beim gierigen .* — es greift so viel wie möglich; nutze .*? oder eine spezifischere Klasse, wenn es überzieht.
  • Teste an echten Daten, inklusive der Randfälle, die scheitern sollen.

Am schnellsten lernst du, indem du Treffer beim Tippen aufleuchten siehst. Probiere Muster live im kostenlosen Regex-Tester — er hebt jeden Treffer hervor und listet Capture-Gruppen, alles im Browser.

Über die Grundlagen hinaus: Lookarounds und benannte Gruppen

Wenn die Grundlagen sitzen, schalten zwei Features viel frei:

  • Lookahead (?=…) und negativer Lookahead (?!…) treffen eine Position nur dann, wenn das Folgende (nicht) passt — ohne es zu verbrauchen. \d(?=px) trifft eine Ziffer, auf die px folgt.
  • Lookbehind (?<=…) und (?<!…) tun dasselbe für das Vorangehende. Heute breit unterstützt (JavaScript seit ES2018, dazu PCRE und .NET).
  • Benannte Gruppen (?<year>\d{4}) sind viel lesbarer als das Zählen von \1, \2. Referenziere sie mit \k<year> oder per Name im Ersetzungsstring.

Häufige Fehler

  • Metazeichen verstummen in […]. In einer Zeichenklasse sind ., * und ( wörtlich; nur ^ (am Anfang), - (zwischen Zeichen), ] und \ bleiben besonders. [.?] trifft also einen echten Punkt oder ein Fragezeichen.
  • \d ist nicht immer Unicode. In JavaScript bedeutet \d genau [0-9]; manche Engines dehnen es auf Ziffern anderer Schriften aus. Wenn du ASCII meinst, schreib [0-9].
  • Katastrophales Backtracking. Verschachtelte Quantoren über überlappenden Text — etwa (a+)+$ gegen einen langen nicht passenden String — können die Engine aufhängen. Schreibe die Mehrdeutigkeit um.

Der Fehler, der am meisten Zeit kostet, ist die Annahme, ein Quantor höre dort auf, wo man selbst aufhören würde zu lesen. Gegen <b>bold</b> and <i>it</i> liefert das lazy <.+?>

#1"<b>"@0 #2"</b>"@7 #3"<i>"@16 #4"</i>"@21

Vier Treffer bei 0, 7, 16 und 21 — jedes Tag und nichts dazwischen. Das greedy <.+> liefert einen Treffer bei 0, der die ganze Zeichenkette umfasst. Gleiche Zeichen, gleiche Eingabe, und der einzige Unterschied ist ein ?.

Weiterlesen

Regex ist nicht die einzige kompakte Syntax, die sich zu entschlüsseln lohnt — wenn du Jobs planst, gilt dasselbe „sieht aus wie Kauderwelsch, dann klickt es” für Cron-Ausdrücke.