Einen regulären Ausdruck testen

testet einen regulären Ausdruck (regex) gegen einen Text und zeigt Übereinstimmungen und erfasste Gruppen an

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 von football).
  • 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_limit auf 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 auf
  • GET https://cdrn.fr/api/v1/tools/regex-tester - liefert das Schema dieses Tools
  • POST https://cdrn.fr/api/v1/tools/regex-tester/execute - führt dieses Tool mit einem JSON-Payload aus