Wie Sie reguläre Ausdrücke online testen
Reguläre Ausdrücke sind eines der mächtigsten Werkzeuge in der Programmierung und eines der frustrierendsten zum richtigen Hinbekommen. Ein Regex-Tester ermöglicht es Ihnen, Muster interaktiv zu erstellen und zu debuggen, anstatt Ihren Code auszuführen, die Ausgabe zu überprüfen und zu raten, was schiefgegangen ist. Die Feedback-Schleife sinkt von Minuten pro Iteration auf Sekunden.
Warum einen Regex-Tester verwenden
Regex in Ihrem Code-Editor zu schreiben bedeutet, dass Sie Fehler nur zur Laufzeit sehen. Ein Tester zeigt Ihnen:
- Live-Match-Hervorhebung: Sehen Sie genau, welche Teile Ihres Textes übereinstimmen, während Sie das Muster eingeben
- Capture-Gruppen: Sehen Sie, was jede Gruppe erfasst, ohne Debug-Ausgabe zu schreiben
- Match-Details: exakte Positionen, Längen und Inhalt jeder Übereinstimmung
- Ersetzungsvorschau: Sehen Sie das Ergebnis von Suchen und Ersetzen, bevor Sie sich darauf festlegen
So testen Sie Regex online
- Geben Sie Ihr Muster ein: Geben Sie den Regex im Musterfeld ein. Schalten Sie Flags (g für global, i für Groß-/Kleinschreibung unabhängig, m für mehrzeilig) nach Bedarf um.
- Fügen Sie Ihren Testtext ein: Geben Sie den Text ein, gegen den Sie abgleichen möchten. Übereinstimmungen werden in Echtzeit hervorgehoben.
- Ergebnisse anzeigen: Sehen Sie alle Übereinstimmungen mit unten aufgelisteten Capture-Gruppen. Verwenden Sie das Feld «Ersetzen mit», um Ersetzungen zu testen.
Eine kurze Geschichte der regulären Ausdrücke
Reguläre Ausdrücke wurden 1951 vom Mathematiker Stephen Kleene als Notation für «reguläre Ereignisse» in seiner Arbeit zu neuronalen Netzwerken formalisiert. Sie sprangen von der Theorie zur praktischen Verwendung, als Ken Thompson sie 1968 im QED-Texteditor bei Bell Labs implementierte, dann im ed-Editor (1969) und schließlich im grep-Dienstprogramm (1973), dessen Name von «global / regular expression / print» stammt.
Perl, eingeführt von Larry Wall im Jahr 1987, erweiterte die Regex-Syntax erheblich: nicht-gierige Quantifizierer, Lookahead, benannte Gruppen, Zeichenklassen-Abkürzungen wie \d und \w. Die Perl-Compatible Regular Expressions (PCRE)-Bibliothek, veröffentlicht 1997, wurde zum De-facto-Standard für die meisten modernen Sprachen.
Heute hat praktisch jede Programmiersprache eingebaute Regex-Unterstützung, obwohl die Syntax leicht variiert. Die JavaScript-Engine (V8 in Chrome, SpiderMonkey in Firefox) ist stark optimiert und treibt die meisten Online-Regex-Tester an. PHP, Python (re-Modul) und Java (java.util.regex) verwenden eng verwandte, aber nicht identische Syntax. Zu wissen, für welche Variante Sie schreiben, ist für erweiterte Funktionen wichtig.
Gängige Regex-Muster, die es wert sind, gekannt zu werden
E-Mail-Adresse (grundlegend):
[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}
URL:
https?://[^\s]+
Telefonnummer (US):
\(?\d{3}\)?[-.\s]?\d{3}[-.\s]?\d{4}
Datum (JJJJ-MM-TT):
\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\d|3[01])
IP-Adresse (IPv4):
\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b
Hex-Farbcode:
#(?:[0-9a-fA-F]{3}){1,2}\b
Slug (URL-sicherer Bezeichner):
^[a-z0-9]+(?:-[a-z0-9]+)*$
String mit gekürzten Leerzeichen:
^\s*(.*?)\s*$
Geschmacksunterschiede zwischen Sprachen
Die Regex-Syntax ist größtenteils portabel, hat aber Tücken:
- JavaScript: Lookbehinds in ES2018 hinzugefügt (
(?<=...),(?<!...)), unterstützt in Chrome 62+, Firefox 78+, Safari 16.4+. Benannte Gruppen über(?<name>...). - Python: Das
re-Modul unterstützt fast alle Perl-Funktionen; das Drittanbieter-Paketregexfügt noch mehr hinzu (Lookbehind variabler Länge, Fuzzy-Matching). - Java:
\bfür Wortgrenze funktioniert gleich; benannte Gruppen verwenden(?<name>...). Pattern.compile + Matcher-Muster. - PHP: Die
preg_match-Familie verwendet PCRE unter der Haube. Muster benötigen Trennzeichen:/muster/flags. - Go: Verwendet RE2-Syntax (keine Rückbezüge, kein Lookaround) für garantiert lineare Leistung. Einige Muster, die in JS/PCRE funktionieren, schlagen in Go fehl.
- Rust: Der
regex-Crate verwendet standardmäßig RE2; derfancy-regex-Crate fügt Lookaround hinzu.
Wenn Sie einen Regex in einem Tester schreiben (fast immer JavaScript-Geschmack), bestätigen Sie, dass die Zielsprache alle von Ihnen verwendeten Funktionen unterstützt, bevor Sie sich darauf festlegen.
Häufige Fallstricke
- Katastrophales Backtracking: Muster wie
(a+)+bgegenaaaaaaaaaaaaaaaaaaaaaaaackönnen exponentielle Zeit beanspruchen. Die Regex-Engine probiert jede mögliche Gruppierung aus. Verwenden Sie possessive Quantifizierer ((a++)+) oder atomare Gruppen(?>a+)+, um dies zu verhindern. RE2 und Go-Regex sind von Natur aus immun. - Gierige vs faule Quantifizierer:
a.*bstimmt so viel wie möglich überein (gierig);a.*?bstimmt so wenig wie möglich überein (faul). Eines mit dem anderen zu verwechseln ist die #1-Quelle von «mein Regex stimmt zu viel überein». - Anker im Mehrzeilenmodus:
^und$stimmen standardmäßig mit Beginn/Ende der Zeichenkette überein. Mit derm-Flag stimmen sie mit Beginn/Ende jeder Zeile überein. Dies zu vergessen führt zu unvollständigen Ergebnissen. - Sonderzeichen in Zeichenklassen: Innerhalb von
[...]verlieren die meisten Sonderzeichen ihre Bedeutung.[.]stimmt mit einem wörtlichen Punkt überein. Aber],\und^(am Anfang) müssen immer noch escaped werden. - Unicode und
\w:\wist[A-Za-z0-9_]in den meisten Varianten, daher stimmt es NICHT mit akzentuierten Buchstaben wieéoder nicht-lateinischen Schriften überein. Verwenden Sie\p{L}(Unicode-Eigenschafts-Escape) oder übergeben Sie dieu-Flag in JS. - Vergessen der globalen Flag: Ohne
gwerfen Methoden wieString.matchAll(), und.replace()ersetzt nur die erste Übereinstimmung. Der Tester verwendet standardmäßig global, aber Ihr echter Code tut dies möglicherweise nicht. - Verankerung der vollständigen Eingabevalidierung:
^foo$stellt sicher, dass die gesamte Eingabe «foo» ist. Ohne die Anker stimmtfooüberall in der Zeichenkette überein, was ein Sicherheitsrisiko bei der Eingabevalidierung darstellt.
Wann KEIN Regex verwenden
Regex ist das falsche Werkzeug für einige Aufgaben:
- HTML oder XML parsen: Verschachtelte Strukturen, Attribute und beliebige Leerzeichen machen Regex unpraktisch. Verwenden Sie einen geeigneten Parser (DOMParser, BeautifulSoup, lxml).
- JSON parsen: Gleicher Grund. Verwenden Sie
JSON.parse()oder Äquivalent. - Quellcode parsen: AST-Parser (Acorn, Esprima, AST-grep) verstehen Syntax. Regex sieht nur Text.
- E-Mail-Validierung: Der RFC 5322 gültige E-Mail-Regex ist über 6.000 Zeichen lang. Für eine echte Validierung senden Sie stattdessen eine Bestätigungs-E-Mail.
- Passwort-Stärkeregeln: Komplexe Regex-Muster für «muss Großbuchstaben, Kleinbuchstaben, Ziffer, Sonderzeichen enthalten» sind schwer zu warten. Setzen Sie stattdessen mehrere einfache Prüfungen zusammen.
Wenn Sie einen Regex über 100 Zeichen mit mehreren verschachtelten Gruppen schreiben, lösen Sie wahrscheinlich das falsche Problem.
Tipps zum Schreiben besserer Regex
- Einfach anfangen: Bringen Sie zuerst ein grundlegendes Muster zum Laufen, fügen Sie dann Komplexität hinzu. Den perfekten Regex auf Anhieb zu schreiben funktioniert selten.
- Verwenden Sie die globale Flag (g): Ohne sie stoppt der Tester bei der ersten Übereinstimmung. Mit
gsehen Sie alle Übereinstimmungen im Text. - Testen Sie Randfälle: Ihr Regex könnte mit den offensichtlichen Fällen übereinstimmen, aber bei leeren Strings, Sonderzeichen oder Grenzbedingungen versagen. Fügen Sie diese zu Ihrem Testtext hinzu.
- Sonderzeichen escapen: Zeichen wie
.,*,+,?,(,),[,],{,},\,^,$und|haben in Regex eine spezielle Bedeutung. Um sie wörtlich zu treffen, mit einem Backslash voranstellen. - Verwenden Sie nicht-erfassende Gruppen: Wenn Sie Klammern für die Gruppierung benötigen, aber die Erfassung nicht benötigen, verwenden Sie
(?:...)anstelle von(...). Dies hält Ihre Übereinstimmungsergebnisse sauberer. - Kommentieren Sie komplexe Muster: Die meisten Varianten unterstützen die
x-Flag (erweiterter Modus), die Leerzeichen und# Kommentareinnerhalb des Musters erlaubt. Verwenden Sie sie für Regex über 50 Zeichen. - Speichern Sie Ihre Tests: Ein Regex, der heute auf Ihrem Testtext funktioniert, sollte für immer auf ähnlichen Eingaben funktionieren. Speichern Sie die Testfälle neben dem Regex in Ihrem Codebase als Dokumentation.
Datenschutz und vertrauliche Testdaten
Der Regex-Tester läuft vollständig in Ihrem Browser unter Verwendung der nativen RegExp-Engine von JavaScript. Das Muster, das Sie schreiben, der Testtext, den Sie einfügen, und die Übereinstimmungen, die Sie sehen, bleiben alle auf Ihrem Gerät. Nichts wird hochgeladen, protokolliert oder von einem Server analysiert.
Das ist wichtig, weil Regex-Testtext oft sensible Informationen enthält: Produktions-Log-Beispiele (mit echten Benutzer-IDs, IP-Adressen, Sitzungs-Tokens), aus einem CRM gezogene E-Mail-Listen, ungewöhnlich formatierte Kundendaten. Cloud-Regex-Tester leiten all dies durch ihre Server, manchmal speichern sie es zu «Verbesserungs»-Zwecken. Ein browserbasierter Tester hat null Exposition für irgendetwas davon.
Häufig gestellte Fragen
Funktioniert mein Regex in anderen Programmiersprachen?
Der Großteil der Regex-Syntax ist in JavaScript, Python, Java, PHP und anderen gleich. Grundlegende Muster (Zeichenklassen, Quantoren, Anker) funktionieren überall. Einige fortgeschrittene Funktionen wie Lookbehinds oder benannte Gruppen unterscheiden sich zwischen Sprachen.
Werden meine Testdaten an einen Server gesendet?
Nein. Die gesamte Regex-Auswertung erfolgt lokal in Ihrem Browser über die native RegExp-Engine von JavaScript. Nichts wird irgendwohin gesendet.
Kann ich Ersetzungen testen?
Ja. Geben Sie ein Ersetzungsmuster ein (mit $1, $2 usw. für Capture-Gruppen), um das Ergebnis einer Suchen-und-Ersetzen-Operation in Echtzeit zu sehen.
Funktioniert das offline?
Ja. Sobald die Seite geladen ist, funktioniert das Tool vollständig in Ihrem Browser ohne Internetverbindung.