Einen regulären Ausdruck testen
- Dashboard
- Dokumentation
- API
Wofür dient ein Regex-Tester?
Ein Regex-Tester erlaubt es zu überprüfen, dass ein Regex-Muster wirklich
zum erwarteten Text passt, ohne den Anwendungscode auszuführen. Man fügt das Muster ein, fügt den Eingabetext ein, hakt
die Optionen an (Flags), und das Tool zeigt sofort die Liste der gefundenen Übereinstimmungen
sowie die erfassten Gruppen an. Es ist das Online-Äquivalent von preg_match_all() in PHP, von
String.matchAll() in JavaScript oder von re.findall() in Python.
Regex sind sowohl mächtig als auch tückisch. Ein Komma, eine falsch platzierte Klammer, ein gieriger Quantor, der zu viele Zeichen aufsaugt: und die extrahierte Zeichenkette ist nicht mehr die erwartete. Der Tester vermeidet das Hin und Her mit einem Editor, einem Terminal und einer Testdatei: Man iteriert das Muster, bis man das richtige Ergebnis sieht.
Wie schreibt man das Muster?
Geben Sie die Regex ohne Begrenzer ein. Kein /.../, kein #...#.
Um zum Beispiel die E-Mail-Adressen aus einem Text zu erfassen, geben Sie nur
[\w.+-]+@[\w-]+\.[\w.-]+ ein. Die Optionen (Flags) werden über die Kontrollkästchen gesteuert.
Die Option u (Unicode) ist standardmäßig aktiviert. Sie ist fast immer gewünscht: Ohne sie
erkennt \w keine Akzente, und einige Muster geben einen stillen PCRE-Fehler auf
UTF-8-Zeichenketten zurück.
Die PCRE-Optionen
- i (case-insensitive):
[a-z]erkennt auch Großbuchstaben. - m (multiline):
^und$matchen die Anfänge und Enden jeder Zeile, nicht mehr nur den Anfang und das Ende der gesamten Zeichenkette. - s (dotall):
.erkennt auch Zeilenumbrüche. Nützlich für Muster, die Absätze durchqueren müssen. - u (unicode): interpretiert das Muster und das Subjekt in UTF-8. Unverzichtbar, sobald der Text Nicht-ASCII-Zeichen enthält (Akzente, Emoji, Ideogramme).
Beispiele gängiger Regex
- E-Mail-Adresse:
[\w.+-]+@[\w-]+\.[\w.-]+(vereinfachte Form, ausreichend für die meisten praktischen Fälle; die strikte RFC 5322 ist sehr komplex). - HTTP/HTTPS-URL:
https?://[\w.-]+(?:/[\w./?%&=-]*)? - Französische Telefonnummer:
(?:\+33|0)\s?[1-9](?:[\s.-]?\d{2}){4} - Französische Postleitzahl:
\b\d{5}\b - ISO-Datum (YYYY-MM-DD):
\b\d{4}-\d{2}-\d{2}\b - IPv4-Adresse:
\b(?:\d{1,3}\.){3}\d{1,3}\b - Ganzes Wort:
\bfoo\b(die word boundaries vermeiden das Matchen vonfootball). - Hashtag:
#\w+ - Semantische Versionsnummer:
\d+\.\d+\.\d+(?:-[\w.-]+)? - Twitter-/X-ID:
@\w{1,15}
Erfasste Gruppen
Eine Regex kann Gruppen in Klammern enthalten, die einen Teil des Matches zur Wiederverwendung isolieren.
Zum Beispiel erfasst das Muster (\w+)@(\w+\.\w+), angewendet auf alice@example.com, zwei
Gruppen: alice und example.com. Das Tool zeigt diese Gruppen in einer
dedizierten Spalte neben jedem Match an. Die benannten Gruppen ((?P<name>...)) werden ebenfalls
aufgelistet, indexiert nach ihrem Namen.
Um zu gruppieren, ohne zu erfassen (nützlich, um einen Quantor anzuwenden, ohne die Gruppenliste zu verunreinigen),
verwendet man (?:...).
Schutz vor ReDoS
Die PCRE-Engine von PHP kann bei bestimmten pathologischen Mustern in catastrophic backtracking geraten:
Ein Muster wie (a+)+$, angewendet auf eine lange nicht abgeschlossene Kette von a, kann
den Server mehrere Sekunden blockieren. Um diesen Denial-of-Service durch reguläre Ausdrücke
(ReDoS) zu vermeiden, wendet das Tool zwei Grenzen an:
- ein
set_time_limit(2)auf der Worker-Seite (die Verarbeitung wird nach 2 Sekunden abgebrochen); - eine Reduzierung von
pcre.backtrack_limitauf 100.000, was Muster, die zu viele Kombinationen erkunden, schnell zum Scheitern bringt.
Bei einem zu kostspieligen Muster zeigt das Tool die PCRE-Fehlermeldung
(preg_last_error_msg()) an, typischerweise Backtrack limit was exhausted. Formulieren Sie Ihr
Muster mit possessiven Quantoren (a++) oder atomaren Gruppen
((?>...)) um, um Backtracking zu vermeiden.
Häufig gestellte Fragen
Warum matcht meine Regex nicht, obwohl sie in JavaScript funktioniert?
Die Engine dieses Tools ist PCRE (PHP), nahe an Perl. Die Syntax ist JavaScript sehr ähnlich, aber einige Funktionen unterscheiden sich: Lookbehinds variabler Länge, bestimmte Unicode- Aliase oder die standardmäßige Behandlung der Groß-/Kleinschreibung. Wenn Sie das Muster im Browser ausführen wollen, testen Sie auch in einer JS-Umgebung.
Warum erfasst mein \w keine Akzente?
Ohne das Flag u erkennt \w nur [A-Za-z0-9_]. Mit
u (Unicode) erkennt es alle Buchstaben im UCD-Sinne, einschließlich akzentuierter Zeichen.
Um weiter zu gehen, verwenden Sie die Unicode-Klassen: \p{L} (Buchstabe), \p{N}
(Ziffer), \p{P} (Satzzeichen).
Speichert das Tool meinen Text?
Nein. Das Muster und das Subjekt werden vom PHP-Worker im RAM verarbeitet, ohne Persistenz. Keine übermittelten Daten werden protokolliert.
Was tun, wenn ich die Meldung "Backtrack limit was exhausted" erhalte?
Ihr Muster macht zu viele Backtracks. Suchen Sie nach nested quantifiers wie
(a+)+ oder (\w+)*, die typische Fälle von ReDoS sind. Ersetzen Sie sie durch eine
eindeutige Form: zum Beispiel \w+ statt (\w+)*.
Kann ich ein mehrzeiliges Muster testen?
Ja. Aktivieren Sie die Option m, damit ^ und $ die Anfänge
und Enden jeder Zeile erkennen. Aktivieren Sie zusätzlich s, wenn Sie möchten, dass . die
Zeilenumbrüche durchquert.
Beispielanfrage
curl -X POST https://cdrn.fr/api/v1/tools/regex-tester/execute \
-H "Content-Type: application/json" \
-d '{"pattern":"...","subject":"...","flag_i":false,"flag_m":false,"flag_s":false,"flag_u":true}'
Eingabeschema
| Feld | Typ | Erforderlich | Standard |
|---|---|---|---|
pattern |
string | ✓ | – |
subject |
text | ✓ | – |
flag_i |
boolean | ✓ | false |
flag_m |
boolean | ✓ | false |
flag_s |
boolean | ✓ | false |
flag_u |
boolean | ✓ | true |
Endpunkte
GET https://cdrn.fr/api/v1/tools- listet alle verfügbaren Tools aufGET https://cdrn.fr/api/v1/tools/regex-tester- liefert das Schema dieses ToolsPOST https://cdrn.fr/api/v1/tools/regex-tester/execute- führt dieses Tool mit einem JSON-Payload aus