Regex Spickzettel: Häufige Muster & Schnellreferenz

· 12 Min. Lesezeit

Inhaltsverzeichnis

Reguläre Ausdrücke sind eines der mächtigsten Werkzeuge im Toolkit eines Entwicklers, bleiben aber für viele Programmierer einschüchternd. Dieser umfassende Spickzettel unterteilt Regex-Muster in verdauliche Abschnitte mit praktischen Beispielen, die Sie sofort verwenden können.

Ob Sie E-Mail-Adressen validieren, Logdateien parsen oder unordentliche Daten bereinigen – dieser Leitfaden hilft Ihnen, schneller bessere Regex-Muster zu schreiben. Wir decken alles ab, von einfachem Zeichenabgleich bis zu fortgeschrittenen Lookaround-Assertions.

Regex Grundlagen

Reguläre Ausdrücke (Regex oder Regexp) sind Muster, die verwendet werden, um Zeichenkombinationen in Strings abzugleichen. Sie werden in praktisch jeder Programmiersprache unterstützt – JavaScript, Python, Java, PHP, Ruby, Go und mehr – sowie in Texteditoren wie VS Code, Sublime Text und Kommandozeilen-Tools wie grep und sed.

Im Kern bestehen Regex-Muster aus zwei Arten von Zeichen: literale Zeichen, die sich selbst exakt abgleichen, und Metazeichen, die spezielle Bedeutungen haben und Abgleichsregeln definieren.

Der einfachste Regex ist ein literaler String. Das Muster hello gleicht den Text "hello" exakt ab, wo immer er erscheint. Aber die wahre Macht kommt von Metazeichen, die Flexibilität hinzufügen – wie das Abgleichen beliebiger Ziffern, wiederholende Muster oder Verankerung an bestimmten Positionen.

Profi-Tipp: Verwenden Sie unseren Regex Tester, um in Echtzeit mit Mustern zu experimentieren. Sie sehen Übereinstimmungen sofort beim Tippen hervorgehoben, was es viel einfacher macht zu verstehen, wie Muster funktionieren.

Literale Zeichen vs. Metazeichen

Die meisten Zeichen in einem Regex-Muster sind literal – sie gleichen sich selbst ab. Das Muster cat gleicht die Buchstaben c, a und t in genau dieser Reihenfolge ab. Bestimmte Zeichen haben jedoch spezielle Bedeutungen:

Zum Beispiel gleicht example\.com "example.com" literal ab, während example.com "exampleXcom" abgleichen würde, weil der nicht maskierte Punkt jedes Zeichen abgleicht.

Zeichenklassen

Zeichenklassen ermöglichen es Ihnen, ein Zeichen aus einer Reihe von Möglichkeiten abzugleichen. Sie sind die Grundlage flexibler Musterabgleiche und kommen in zwei Formen: vordefinierte Kurzschreibweisen und benutzerdefinierte Klammerausdrücke.

Muster Gleicht ab Beispiel
. Jedes Zeichen außer Zeilenumbruch h.t → hat, hot, hit, h@t
\d Jede Ziffer [0-9] \d{3} → 123, 456, 789
\D Jede Nicht-Ziffer \D+ → abc, xyz, @#$
\w Wortzeichen [a-zA-Z0-9_] \w+ → hello_world, var123
\W Nicht-Wortzeichen \W → @, #, Leerzeichen, Interpunktion
\s Leerzeichen (Leerzeichen, Tab, Zeilenumbruch) \s+ → jede Leerzeichenfolge
\S Nicht-Leerzeichen \S+ → alle sichtbaren Zeichen
[abc] Eines von a, b oder c [aeiou] → jeder Vokal
[^abc] Nicht a, b oder c [^0-9] → jede Nicht-Ziffer
[a-z] Bereich: a bis z [A-Za-z] → jeder Buchstabe
[a-z0-9] Mehrere Bereiche [a-fA-F0-9] → Hex-Ziffern

Benutzerdefinierte Zeichenklassen

Klammerausdrücke [] ermöglichen es Ihnen, Ihre eigenen Zeichensätze zu definieren. Innerhalb von Klammern verlieren die meisten Metazeichen ihre spezielle Bedeutung – Sie müssen sie nicht maskieren.

Schnell-Tipp: Die Reihenfolge der Zeichen in einer Zeichenklasse spielt keine Rolle. [abc] und [bca] sind identisch. Die Klasse gleicht ab, wenn eines der Zeichen vorhanden ist.

Praktische Beispiele

Hier sind einige reale Anwendungen von Zeichenklassen:

Quantifizierer und Wiederholung

Quantifizierer geben an, wie oft ein Muster wiederholt werden soll. Sie werden nach dem Element platziert, das Sie wiederholen möchten – ein Zeichen, eine Zeichenklasse oder eine Gruppe.

Quantifizierer Bedeutung Beispiel
* 0 oder mehrmals ab*c → ac, abc, abbc, abbbc
+ 1 oder mehrmals ab+c → abc, abbc (nicht ac)
? 0 oder 1 Mal (optional) colou?r → color, colour
{n} Genau n Mal \d{4} → 2026, 1999
{n,} n oder mehrmals \w{3,} → Wörter mit 3+ Zeichen
{n,m} Zwischen n und m Mal \d{2,4} → 12, 123, 1234
*? Lazy/minimaler Abgleich (0 oder mehr) <.*?> → nur erstes Tag
+? Lazy/minimaler Abgleich (1 oder mehr) ".+?" → erster String in Anführungszeichen
?? Lazy/minimaler Abgleich (0 oder 1) \d?? → gleicht 0 Ziffern ab, wenn möglich

Gieriger vs. Lazy Abgleich

Dies ist eines der wichtigsten Konzepte in Regex. Standardmäßig sind Quantifizierer gierig – sie gleichen so viel Text wie möglich ab, während das Gesamtmuster noch abgeglichen werden kann.

Betrachten Sie den HTML-String <b>bold</b> and <i>italic</i>:

Das Hinzufügen von ? nach einem Quantifizierer macht ihn lazy (auch nicht-gierig oder minimal genannt). Er gleicht so wenig Text wie möglich ab, während das Muster noch erfolgreich ist.

Profi-Tipp: Beim Extrahieren von Inhalten zwischen Trennzeichen (Anführungszeichen, Tags, Klammern) verwenden Sie fast immer lazy Quantifizierer. Das Muster ".*?" extrahiert korrekt einzelne Strings in Anführungszeichen, während ".*" vom ersten Anführungszeichen bis zum letzten Anführungszeichen im gesamten Text abgleichen würde.

Häufige Quantifizierer-Muster

Hier sind Muster, die Sie ständig verwenden werden:

Anker und Grenzen

Anker gleichen keine Zeichen ab – sie gleichen Positionen im String ab. Sie sind wesentlich, um sicherzustellen, dass Muster an bestimmten Stellen abgleichen, anstatt irgendwo im Text.

Anker Position Beispiel
^ Anfang des Strings (oder Zeile mit m-Flag) ^Hello → gleicht "Hello world" ab, aber nicht "Say Hello"
$ Ende des Strings (oder Zeile mit m-Flag) end$ → gleicht "The end" ab, aber nicht "end of story"
\b Wortgrenze \bcat\b → gleicht "cat" ab, aber nicht "category"
\B Keine Wortgrenze \Bcat\B → gleicht "concatenate" ab, aber nicht "cat"
\A Anfang des Strings (niemals Zeile) Wie ^, aber ignoriert Mehrzeilen-Modus
\Z Ende des Strings (niemals Zeile) Wie $, aber ignoriert Mehrzeilen-Modus

Wortgrenzen erklärt

Die Wortgrenze \b ist unglaublich nützlich, wird aber oft missverstanden. Sie gleicht die Position zwischen einem Wortzeichen (\w) und einem Nicht-Wortzeichen (\W) ab, oder am Anfang/Ende des Strings.

Betrachten Sie das Muster \bcat\b angewendet auf verschiedene Strings:

Dies macht \b perfekt zum Finden ganzer Wörter, ohne versehentlich Teile größerer Wörter abzugleichen.

Anfangs- und End-Anker

Die ^ und $ Anker sind wesentlich für die Validierung. Wenn Sie sicherstellen möchten, dass ein gesamter String einem Muster entspricht (nicht nur enthält), umschließen Sie Ihr Muster mit diesen Ankern.

Schnell-Tipp: Beim Validieren von Benutzereingaben (E-Mail, Telefon, Benutzername) verwenden Sie immer ^ und $, um Ihr Muster zu verankern. Ohne sie würde das Muster \d{3} "abc123def" akzeptieren, wenn Sie wahrscheinlich alles ablehnen möchten, was nicht genau 3 Ziffern ist.

Gruppen und Erfassung

Klammern () dienen zwei Zwecken in Regex: Sie gruppieren Teile eines Musters zusammen und erfassen den abgeglichenen Text zur späteren Verwendung. Hier wird Regex wirklich mächtig für Extraktion und Transformation.

Syntax Zweck Beispiel
(abc) Erfassungsgruppe (\d{3})-(\d{4}) erfasst Vorwahl und Nummer
(?:abc) Nicht-erfassende Gruppe (?:https?://)?example\.com gruppiert ohne Erfassung
(a|b) Alternation (ODER) (cat|dog) gleicht entweder "cat" oder "dog" ab
\1 Rückverweis auf Gruppe 1 (\w+)\s+\1 gleicht wiederholte Wörter wie "the the" ab
(?<name>abc) Benannte Erfassungsgruppe (?<year>\d{4})-(?<month>\d{2}) für Daten

Erfassungsgruppen

Wenn Sie einen Teil eines Musters in Klammern einschließen, erfasst die Regex-Engine den abgeglichenen Text. Sie können dann auf diese Erfassungen in Ihrem Code oder sogar innerhalb des Regex selbst mit Rückverweisen verweisen.

Zum Beispiel erstellt das Muster (\d{3})-(\d{3})-(\d{4}) angewendet auf "555-123-4567" drei Erfassungen:

In den meisten Programmiersprachen können Sie auf diese Erfassungen über Match-Objekte oder Ersetzungsstrings zugreifen. Dies ermöglicht es Ihnen, Daten einfach neu zu formatieren – "555-123-4567" in "(555) 123-4567" mit einer Ersetzung wie ($1) $2-$3 umzuwandeln.

Nicht-erfassende Gruppen

Manchmal benötigen Sie Gruppierung für Quantifizierer oder Alternation, müssen aber den Text nicht erfassen. Verwenden Sie (?:...) für nicht-erfassende Gruppen.