Zum Inhalt springen
TextArray

Regex-Spickzettel

Reguläre Ausdrücke sind so kompakt, dass sich die Syntax leichter nachschlagen als merken lässt. Diese Seite zeigt alles auf einem Bildschirm – Klassen, Quantoren, Anker, Gruppen, Lookaround, Escape und die Flags – mit einem funktionierenden Beispiel für jede Zeile.

Die Variante ist JavaScript, das in Ihrem Browser ausgeführt wird und vom Regex-Tester auf dieser Website verwendet wird. Das meiste davon ist in Python, Java, Go und PCRE identisch; Wo Geschmacksrichtungen voneinander abweichen, weichen sie an den Rändern voneinander ab – Lookbehind-Unterstützung, benannte Gruppensyntax und ob \d „ASCII-Ziffer“ oder „beliebige Unicode-Ziffer“ bedeutet.

Zwei Dinge sind für die meisten Überraschungen verantwortlich. Quantifizierer sind gierig: Sie nehmen alles, was sie können, und geben es erst zurück, wenn der Rest des Musters fehlschlägt, weshalb <.+> zwei Tags verschluckt und <.+?> nicht. Und Alternation bindet am lockersten, daher bedeutet ^a|b$ „beginnt mit a oder endet mit b“ – was die meisten Leute nicht beabsichtigen, wenn sie es schreiben.

Charakterklassen

Die Abkürzungen sind nur ASCII, es sei denn, Sie fügen das u-Flag hinzu und verwenden Unicode-Eigenschafts-Escapezeichen.

SyntaxBedeutungBeispiel
.Beliebiges Zeichen außer einem ZeilenumbruchFügen Sie das Flag s hinzu, damit es auch mit Zeilenumbrüchen übereinstimmt./a.c/"abc" → "abc"
\dEine Ziffer, 0–9/\d+/"order 42" → "42"
\DAlles, was keine Ziffer ist/\D+/"42abc" → "abc"
\wBuchstabe, Ziffer oder UnterstrichNur ASCII – „é“ ist nicht \w./\w+/"user_1!" → "user_1"
\WAlles, was mit \w nicht übereinstimmt/\W+/"a++b" → "++"
\sAlle Leerzeichen, einschließlich Tabulatoren und Zeilenumbrüche/\s+/"a \t b" → " \t "
\SJedes Zeichen, das kein Leerzeichen ist/\S+/" hi" → "hi"
[abc]Einer der aufgeführten Charaktere/[aeiou]/"rhythm and" → "a"
[^abc]Alle Zeichen außer den aufgeführten/[^aeiou ]+/"aeiou xyz" → "xyz"
[a-z]Eine Reihe von Charakteren/[a-f]+/"zzabcz" → "abc"
\p{L}Jeder Unicode-Buchstabe (erfordert die u-Flagge)/\p{L}+/"42 café" → "café"

Quantifizierer

Sie alle sind standardmäßig gierig: Sie nehmen so viel wie sie können und geben nur dann etwas zurück, wenn der Rest des Musters fehlschlägt.

SyntaxBedeutungBeispiel
*Null oder mehr/ab*/"a" → "a"
+Einer oder mehrere/ab+/"abbb" → "abbb"
?Null oder Eins – macht es optional/colou?r/"color" → "color"
{3}Genau drei/\d{3}/"id 12345" → "123"
{2,}Zwei oder mehr/a{2,}/"aaa" → "aaa"
{2,4}Zwischen zwei und vier/a{2,4}/"aaaaa" → "aaaa"
*?Faul – braucht so wenig wie möglichDas gierige <.+> würde beide Tags verschlucken./<.+?>/"<a><b>" → "<a>"

Anker und Grenzen

Diese stimmen mit einer Position und nicht mit einem Zeichen überein und verbrauchen daher nichts.

SyntaxBedeutungBeispiel
^Beginn der Zeichenfolge oder einer Zeile mit dem m-Flag/^a/"abc" → "a"
$Ende der Zeichenfolge oder einer Zeile mit dem m-Flag/c$/"abc" → "c"
\bEine WortgrenzeDies ist es, was verhindert, dass „cat“ in „concatenate“ passt./\bcat\b/"the cat sat" → "cat"
\BKeine Wortgrenze/\Bcat/"concatenate" → "cat"

Gruppen und Abwechslung

SyntaxBedeutungBeispiel
(abc)Erfassende Gruppe – zum Ersetzen gespeichert/(\d+)-(\d+)/"10-20" → "10-20"
(?:abc)Gruppieren ohne ErfassenVerwenden Sie dies, wenn Sie nur die Gruppierung benötigen; Dadurch bleiben die Erfassungszahlen aussagekräftig./(?:ab)+/"abab" → "abab"
(?<name>…)Benannte Erfassungsgruppe/(?<year>\d{4})/"in 2026" → "2026"
a|bAuf beiden Seiten – WechselDer Wechsel hat die niedrigste Priorität: ^a|b$ ist „^a“ oder „b$“, nicht „^(a|b)$“./cat|dog/"one dog" → "dog"
\1Rückverweis auf die erste Gruppe/(\w)\1/"letter" → "tt"

Schauen Sie sich um

Aussagen darüber, was eine Position umgibt. Sie passen selbst nicht zusammen und sind daher sicher zu kombinieren.

SyntaxBedeutungBeispiel
(?=…)Lookahead – gefolgt von diesem/\d+(?= kg)/"80 kg" → "80"
(?!…)Negativer Ausblick – davon folgt nichts/\d+(?! kg)/"80 lb" → "80"
(?<=…)Lookbehind – davor/(?<=\$)\d+/"costs $40" → "40"
(?<!…)Negativer Rückblick – das geht nicht voraus/(?<!\$)\b\d+/"about 40" → "40"

Flucht

Diese zwölf Zeichen benötigen einen Backslash, um wörtlich genommen zu werden.

SyntaxBedeutungBeispiel
\.Ein buchstäblicher Punkt/\d\.\d/"v2.5" → "2.5"
\\Ein buchstäblicher Backslash/\\/"C:\\dir" → "\\"
\nEin Zeilenvorschub/a\nb/"a\nb" → "a\nb"
\tEine Registerkarte/a\tb/"a\tb" → "a\tb"
\uFFFFEin Zeichen nach seinem Codepunkt/\u00e9/"café" → "é"

Flaggen

FlaggeNameBedeutung
gGlobalFinden Sie jede Übereinstimmung, nicht nur die erste.
iGroß-/Kleinschreibung ignorierenÜbereinstimmung unabhängig von Groß- oder Kleinschreibung.
mMehrzeiligSorgt dafür, dass ^ und $ bei jedem Zeilenumbruch übereinstimmen und nicht nur am Ende der Zeichenfolge.
sAlles punktierenLass uns. Match-Zeilenumbrüche auch.
uUnicodeBehandelt das Muster als Codepunkte und ermöglicht \p{…}-Eigenschafts-Escapes.
yKlebrigEntspricht nur genau lastIndex, es wird nie vorwärts gesucht.

Häufige Fragen

Was ist der Unterschied zwischen gierigen und faulen Quantoren?
Gierige Quantoren (*, +, {2,}) stimmen so weit wie möglich überein und geben nur dann Zeichen zurück, wenn der Rest des Musters nicht übereinstimmen kann. Hinzufügen? macht sie faul: Sie passen so wenig wie möglich zusammen und nehmen nur dann mehr, wenn sie dazu gezwungen werden. Bei „<a><b>“ gibt das Muster <.+> die gesamte Zeichenfolge und <.+?> nur <a> zurück.
Warum passt mein Wort in andere Wörter?
Weil nichts es verankerte. Wickeln Sie das Wort in \b ein – /\bcat\b/ entspricht „cat“ in „the cat sat“, aber nicht in „concatenate“. \b stimmt mit einer Position zwischen einem Wortzeichen und einem Nichtwortzeichen überein, verbraucht also nichts.
Was ändert sich durch die U-Flagge?
Dadurch arbeitet das Muster mit Codepunkten und nicht mit UTF-16-Einheiten, sodass ein einzelnes Emoji als ein Zeichen zählt, und es ermöglicht \p{…}-Eigenschafts-Escapezeichen wie \p{L} für „beliebigen Buchstaben“. Ohne sie bleiben \w und \d nur ASCII, weshalb „café“ nicht vollständig mit /\w+/ übereinstimmt.
Wann sollte ich eine nicht erfassende Gruppe verwenden?
Wann immer Sie die Gruppierung, aber nicht den erfassten Text benötigen – (?:ab)+ statt (ab)+. Erfassungen kosten ein wenig Leistung, aber der wahre Grund ist die Nummerierung: Jede Erfassungsgruppe, die Sie hinzufügen, verschiebt die Nummern der darauffolgenden, wodurch Ersetzungen, die $1 und $2 verwenden, stillschweigend aufgehoben werden.
Ist die Verwendung von Lookbehind sicher?
In aktuellen Browsern und Node, ja – (?<=…) und (?<!…) werden seit 2018 von allen wichtigen Engines unterstützt. Safari war der letzte, der sie hinzugefügt hat. Wenn Sie auf sehr alte Laufzeiten abzielen, überprüfen Sie dies zunächst. Es gibt kein Polyfill für die Regex-Syntax.