← Neueste Arbeiten
💬 NLP

On the Complexity of the Matching Problem of Regular Expressions with Backreferences

Dieser Artikel etabliert die fein abgestufte rechnerische Komplexität des Matchings von regulären Ausdrücken mit Rückwärtsreferenzen, indem er bedingte untere Schranken unter den Annahmen von SETH und der Dreieckserkennung beweist und gleichzeitig einen verbesserten O(nlog2n)O(n \log^2 n)-Algorithmus für einmal verwendete Rückwärtsreferenzen vorstellt.

Ursprüngliche Autoren: Soh Kumabe, Yuya Uezato

Veröffentlicht 2026-05-11
📖 6 Min. Lesezeit🧠 Tiefgang

Ursprüngliche Autoren: Soh Kumabe, Yuya Uezato

Originalarbeit lizenziert unter CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). Dies ist eine KI-generierte Erklärung des untenstehenden Papers. Sie wurde nicht von den Autoren verfasst oder gebilligt. Für technische Genauigkeit konsultieren Sie das Originalpaper. Vollständigen Haftungsausschluss lesen

Das große Ganze: Der „Regex"-Stau

Stellen Sie sich vor, Sie sind ein Sicherheitsbeamter an einem Club (dem Computersystem). Sie haben eine Liste von Regeln (einen Regulären Ausdruck), wer hereinkommen darf.

  • Einfache Regeln: „Nur Personen mit roten Hemden." Das ist leicht zu prüfen. Sie schauen auf ein Hemd, sagen „Rot? Ja, rein." Es dauert gleich viel Zeit, egal ob die Schlange 10 oder 10.000 Personen lang ist.
  • Das Problem (ReDoS): Manchmal basteln Hacker eine spezifische Schlange von Personen, die den Beamten dazu bringt, eine massive Menge unnötiger Arbeit zu verrichten. Statt eine Person zu prüfen und weiterzumachen, prüft der Beamte Person A, dann Person B, dann wieder Person A, dann Person C, dann wieder Person A ... bis der Beamte vor Erschöpfung zusammenbricht. Dies wird als Denial-of-Service-Angriff (ReDoS) bezeichnet.

In der realen Welt hat dies massive Websites wie Stack Overflow und Cloudflare zum Absturz gebracht. Das Paper stellt fest, dass selbst eine „quadratische" Verlangsamung (wo das Prüfen von 100 Personen 10.000 Schritte erfordert) ausreicht, um ein System zum Absturz zu bringen.

Der Bösewicht: „Backreferences" (Rückbezüge)

Standardregeln sind einfach. Aber moderne „Regex"-Engines verfügen über eine supermächtige Funktion namens Backreferences.

Die Analogie:
Stellen Sie sich eine Regel vor, die sagt: „Finde ein Wort, merke es dir, und stelle dann sicher, dass exakt dasselbe Wort später wieder erscheint."

  • Beispiel: „Finde ein Wort, nenne es 'X'. Finde dann 'X' erneut."
  • Wenn die Eingabe apple ... apple lautet, funktioniert es.
  • Wenn die Eingabe apple ... banana lautet, schlägt es fehl.

Diese Funktion ist für Programmierer unglaublich nützlich, macht aber die Arbeit des „Beamten" viel schwieriger. Der Beamte muss sich merken, was er früher gesehen hat, und ständig damit vergleichen, was er gerade sieht. Das Paper fragt: Können wir einen Beamten bauen, der schnell genug ist, um diese komplexen Regeln zu bewältigen, ohne müde zu werden?

Die Erkenntnisse des Papers: Das Gute, das Schlechte und das Hässliche

Die Autoren untersuchten genau, wie schwer es ist, diese Matching-Probleme zu lösen. Sie unterteilten es in zwei Seiten: Schwierigkeit (Warum es schwierig ist) und Algorithmen (Wie man es löst).

1. Die schlechte Nachricht: Manche Regeln lassen sich nicht beschleunigen

Das Paper beweist, dass es für bestimmte Arten komplexer Regeln keine „Wunderwaffe" gibt, um sie schnell zu machen.

  • Das „Dreieck"-Problem: Sie zeigten, dass wenn Sie eine Regel haben, die zwei Variablen verwendet (wie das Merken von zwei verschiedenen Wörtern und das spätere Prüfen davon), das Lösen so schwer ist wie das Finden eines Dreiecks in einem riesigen sozialen Netzwerk-Graphen. Wenn Sie die Regel schnell lösen könnten, könnten Sie das Graphenproblem schnell lösen. Da Graphen-Experten glauben, dass das Graphenproblem inhärent langsam ist, muss das Regelproblem auch langsam sein.
  • Das „Orthogonale Vektoren"-Problem: Für Regeln mit noch mehr Variablen bewiesen sie, dass die benötigte Zeit exponentiell mit der Anzahl der Variablen wächst. Es ist wie der Versuch, eine spezifische Kombination von Schlüsseln in einem Schloss zu finden; je mehr Schlüssel Sie haben, desto unmöglicher wird es, dies durch Brute-Force schnell zu erledigen.

Fazit: Wenn Ihre Regel zu komplex ist (zu viele „merke dir das"-Funktionen verwendet), können Sie keine schnelle Engine dafür bauen. Sie werden immer an eine Wand stoßen.

2. Die gute Nachricht: Eine „nahezu lineare" Lösung für einfache Fälle

Das Paper fand jedoch eine goldene Mitte. Sie konzentrierten sich auf einen spezifischen, häufigen Regeltyp:

  • Das „ABCBD"-Muster: „Finde ein Wort (A), dann ein Wort (B), dann ein Wort (C), dann exakt dasselbe Wort B erneut, dann ein Wort (D)."
    • Beispiel aus der Praxis: „Finde einen Benutzernamen, dann ein Passwort, dann eine Nachricht, dann denselben Benutzernamen erneut, dann eine Signatur."

Die Autoren entdeckten, dass dies zwar tricky aussieht, aber sehr effizient gelöst werden kann.

  • Der alte Weg: Frühere Methoden waren wie das Prüfen jeder möglichen Kombination in einer Bibliothek, was O(n2)O(n^2) Zeit (quadratisch) benötigte. Wenn das Buch 1.000 Seiten hatte, dauerte es 1.000.000 Schritte.
  • Der neue Weg: Die Autoren bauten einen neuen Algorithmus, der ungefähr O(nlog2n)O(n \log^2 n) Zeit benötigt.
    • Die Analogie: Stellen Sie sich vor, die Bibliothek ist mit einem magischen Indexsystem organisiert (unter Verwendung von Suffix-Bäumen und Faktorisierungs-Wäldern). Statt jede Seite zu lesen, kann der Beamte direkt zu den relevanten Abschnitten springen. Wenn das Buch 1.000 Seiten hat, benötigt die neue Methode ungefähr 10.000 Schritte (oder sogar weniger), was eine massive Verbesserung darstellt.

Wie der neue Algorithmus funktioniert (Die „Magischen Tricks")

Um diese Geschwindigkeit zu erreichen, verwendeten die Autoren mehrere clevere Techniken, die sie im Paper beschreiben:

  1. Der Suffix-Baum (Die Karte): Sie bauten eine riesige Karte der Eingabezeichenkette. Diese Karte zeigt jedes mögliche Ende der Zeichenkette. Sie hilft dem Beamten, sofort zu sehen: „Ach, dieses Wort 'B' erscheint hier, und es erscheint auch dort."
  2. Heavy-Light-Decomposition (Der Sortierhut): Sie teilten die Karte in „schwere" Pfade (sehr häufige Pfade) und „leichte" Pfade (seltene Pfade) auf. Sie leisten nur bei den seltenen Pfaden die schwere Arbeit, was Zeit spart.
  3. Periodizität (Der Rhythmus): Sie stellten fest, dass wenn sich ein Wort wiederholt (wie „B...B"), die Zeichenkette oft einen Rhythmus oder ein Muster hat. Sie verwendeten Mathematik, um diese Muster vorherzusagen, anstatt jeden einzelnen Buchstaben zu prüfen.
  4. Faktorisierungs-Wälder (Der Index): Dies ist eine Datenstruktur, die wie ein superschneller Index funktioniert und dem Beamten erlaubt, zu prüfen, ob ein Textabschnitt eine Regel erfüllt, in konstanter Zeit, egal wie lang der Text ist.

Zusammenfassung der Schlussfolgerung

  • Können wir alle ReDoS-Angriffe stoppen? Nein. Wenn eine Regel zu komplex ist (zu viele „merke dir das"-Variablen), ist mathematisch bewiesen, dass sie langsam ist.
  • Können wir die häufigsten komplexen Regeln beheben? Ja! Für den spezifischen Fall, bei dem eine Regel ein Wort merkt und es später einmal prüft (das „ABCBD"-Muster), schufen die Autoren eine neue Engine, die fast so schnell ist wie einfache Regeln.
  • Warum ist das wichtig? Es sagt Software-Ingenieuren: „Verwenden Sie nicht zu viele Backreferences, sonst werden Sie langsam. Aber wenn Sie sie auf diese spezifische, gängige Weise verwenden, können Sie jetzt unsere neue Methode nutzen, um Ihr System sicher und schnell zu halten."

Das Paper zieht im Wesentlichen eine Linie im Sand: Hier ist das Geschwindigkeitslimit unbrechbar, und hier haben wir einen Weg gefunden, schneller zu fahren.

Ertrinken Sie in Arbeiten in Ihrem Fachgebiet?

Erhalten Sie tägliche Digests der neuesten Arbeiten passend zu Ihren Forschungsbegriffen — mit technischen Zusammenfassungen, in Ihrer Sprache.

Digest testen →