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:
. ^ $ * + ? { } [ ] \ | ( )sind Metazeichen- Um diese literal abzugleichen, maskieren Sie sie mit einem Backslash:
\.gleicht einen Punkt ab - Innerhalb von Zeichenklassen
[]verlieren die meisten Metazeichen ihre spezielle Bedeutung
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.
[aeiou]gleicht jeden einzelnen Vokal ab[0-9]gleicht jede Ziffer ab (entspricht\d)[a-zA-Z]gleicht jeden Buchstaben ab, Groß- oder Kleinschreibung[^0-9]gleicht alles außer Ziffern ab (das^negiert die Klasse)[a-z-]gleicht Kleinbuchstaben oder einen Bindestrich ab (Bindestrich am Ende ist literal)
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:
[A-Z][a-z]+gleicht großgeschriebene Wörter wie "Hello" oder "World" ab\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}gleicht IP-Adressen ab (einfaches Muster)[a-fA-F0-9]{6}gleicht Hex-Farbcodes wie "FF5733" ab[^\s]+gleicht jede Folge von Nicht-Leerzeichen ab (ein "Wort" im weitesten Sinne)
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>:
<.*>(gierig) gleicht den gesamten String vom ersten<bis zum letzten>ab<.*?>(lazy) gleicht nur<b>, dann</b>, dann<i>, dann</i>separat ab
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:
\d+gleicht eine oder mehrere Ziffern ab (Zahlen wie 42, 1000, 7)\w+gleicht ein oder mehrere Wortzeichen ab (Bezeichner, Variablennamen)\s*gleicht optionale Leerzeichen ab (null oder mehr Leerzeichen/Tabs).+?gleicht beliebige Zeichen lazy ab (Inhalt zwischen Markierungen)[a-z]{2,}gleicht Wörter mit mindestens 2 Kleinbuchstaben ab\d{3}-\d{3}-\d{4}gleicht Telefonnummern wie 555-123-4567 ab
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:
- "the cat sat" → gleicht ab (cat ist von Leerzeichen umgeben)
- "category" → keine Übereinstimmung (cat wird von Wortzeichen 'e' gefolgt)
- "concatenate" → keine Übereinstimmung (cat wird von Wortzeichen vorangestellt und gefolgt)
- "cat" → gleicht ab (cat ist am Anfang und Ende des Strings)
- "cat!" → gleicht ab (cat wird von Interpunktion gefolgt, einem Nicht-Wortzeichen)
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.
^\d+$stellt sicher, dass der gesamte String aus Ziffern besteht (validiert numerische Eingabe)^[A-Z]stellt sicher, dass der String mit einem Großbuchstaben beginnt[.!?]$stellt sicher, dass der String mit Interpunktion endet^https?://stellt sicher, dass eine URL mit http:// oder https:// beginnt
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:
- Gruppe 1: "555"
- Gruppe 2: "123"
- Gruppe 3: "4567"
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.