← Nieuwste papers
💬 NLP

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

Dit artikel vestigt de fijnkorrelige computationele complexiteit van het matchen van reguliere expressies met terugverwijzingen door conditionele ondergrenzen te bewijzen onder de aannames van SETH en driehoekdetectie, terwijl tegelijkertijd een verbeterd O(nlog2n)O(n \log^2 n)-algoritme voor terugverwijzingen met één gebruik wordt gepresenteerd.

Oorspronkelijke auteurs: Soh Kumabe, Yuya Uezato

Gepubliceerd 2026-05-11
📖 6 min leestijd🧠 Diepgaand

Oorspronkelijke auteurs: Soh Kumabe, Yuya Uezato

Oorspronkelijk artikel gelicentieerd onder CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). Dit is een AI-gegenereerde uitleg van het onderstaande artikel. Het is niet geschreven of goedgekeurd door de auteurs. Raadpleeg het oorspronkelijke artikel voor technische nauwkeurigheid. Lees de volledige disclaimer

Het Grote Plaatje: De "Regex" Verkeersopstopping

Stel je voor dat je een beveiligingsagent bent bij een club (het computersysteem). Je hebt een lijst met regels (een Regular Expression) voor wie er binnen mag.

  • Eenvoudige Regels: "Alleen mensen met een rood shirt." Dit is makkelijk te controleren. Je kijkt naar een shirt, zegt "Rood? Ja, kom binnen." Het kost evenveel tijd of de rij nu uit 10 mensen bestaat of uit 10.000.
  • Het Probleem (ReDoS): Soms maken hackers een specifieke rij mensen die de agent ertoe brengt een enorme hoeveelheid onnodig werk te doen. In plaats van één persoon te controleren en door te gaan, begint de agent met het controleren van Persoon A, dan Persoon B, dan weer Persoon A, dan Persoon C, dan weer Persoon A... totdat de agent van uitputting instort. Dit heet een Denial of Service (ReDoS) aanval.

In de echte wereld heeft dit ervoor gezorgd dat enorme websites zoals Stack Overflow en Cloudflare zijn gecrasht. Het paper merkt op dat zelfs "kwadratische" vertraging (waarbij het controleren van 100 mensen 10.000 stappen kost) genoeg is om een systeem te laten crashen.

De Schurk: "Backreferences"

Standaardregels zijn simpel. Maar moderne "Regex"-engines hebben een superkrachtige functie genaamd Backreferences.

De Analogie:
Stel je een regel voor die zegt: "Vind een woord, onthoud het, en zorg er vervolgens voor dat precies hetzelfde woord later weer voorkomt."

  • Voorbeeld: "Vind een woord, noem het 'X'. Vind vervolgens 'X' opnieuw."
  • Als de invoer appel ... appel is, werkt het.
  • Als de invoer appel ... banaan is, faalt het.

Deze functie is ongelooflijk nuttig voor programmeurs, maar het maakt de taak van de "agent" veel moeilijker. De agent moet onthouden wat hij eerder zag en dit voortdurend vergelijken met wat hij nu ziet. Het paper vraagt zich af: Kunnen we een agent bouwen die snel genoeg is om deze complexe regels te hanteren zonder uitgeput te raken?

De Bevindingen van het Paper: Het Goede, Het Slechte en Het Lelijke

De auteurs onderzochten precies hoe moeilijk het is om deze matchingsproblemen op te lossen. Ze splitsten het op in twee kanten: Moeilijkheid (Waarom het moeilijk is) en Algoritmen (Hoe het op te lossen).

1. Het Slechte Nieuws: Sommige Regels zijn Onmogelijk om te Versnellen

Het paper bewijst dat voor bepaalde soorten complexe regels er geen "wondermiddel" bestaat om ze snel te maken.

  • Het "Driehoek"-Probleem: Ze toonden aan dat als je een regel hebt die twee variabelen gebruikt (zoals het onthouden van twee verschillende woorden en het controleren ervan later), het oplossen ervan net zo moeilijk is als het vinden van een driehoek in een gigantisch sociaal netwerk-grafiek. Als je de regel snel kon oplossen, kon je het grafiekprobleem ook snel oplossen. Omdat grafiek-experts geloven dat het grafiekprobleem inherent traag is, moet het regelprobleem ook traag zijn.
  • Het "Orthogonale Vectoren"-Probleem: Voor regels met nog meer variabelen bewezen ze dat de benodigde tijd exponentieel groeit met het aantal variabelen. Het is alsof je probeert een specifieke combinatie van sleutels in een slot te vinden; hoe meer sleutels je hebt, hoe onmogelijker het wordt om dit snel via brute force op te lossen.

Conclusie: Als je regel te complex is (met veel "onthoud dit"-functies), kun je geen snelle engine voor bouwen. Je zult altijd tegen een muur aanlopen.

2. Het Goede Nieuws: Een "Bijna-Lineaire" Oplossing voor Eenvoudige Gevallen

Het paper vond echter een sweet spot. Ze richtten zich op een specifiek, veelvoorkomend type regel:

  • Het "ABCBD"-Patroon: "Vind een woord (A), dan een woord (B), dan een woord (C), dan precies hetzelfde woord B opnieuw, dan een woord (D)."
    • Voorbeeld uit de echte wereld: "Vind een gebruikersnaam, dan een wachtwoord, dan een bericht, dan dezelfde gebruikersnaam opnieuw, dan een handtekening."

De auteurs ontdekten dat hoewel dit er lastig uitziet, het zeer efficiënt opgelost kan worden.

  • De Oude Manier: Vorige methoden waren als het controleren van elke mogelijke combinatie in een bibliotheek, wat O(n2)O(n^2) tijd kostte (kwadratisch). Als het boek 1.000 pagina's had, kostte het 1.000.000 stappen.
  • De Nieuwe Manier: De auteurs bouwden een nieuw algoritme dat ongeveer O(nlog2n)O(n \log^2 n) tijd kost.
    • De Analogie: Stel je voor dat de bibliotheek is georganiseerd met een magisch indexsysteem (met behulp van Suffix Trees en Factorization Forests). In plaats van elke pagina te lezen, kan de agent direct naar de relevante secties springen. Als het boek 1.000 pagina's heeft, kost de nieuwe methode ongeveer 10.000 stappen (of zelfs minder), wat een enorme verbetering is.

Hoe het Nieuwe Algoritme Werkt (De "Magische Trucs")

Om deze snelheid te bereiken, gebruikten de auteurs verschillende slimme technieken, die ze in het paper beschrijven:

  1. De Suffix Tree (De Kaart): Ze bouwden een gigantische kaart van de invoerstring. Deze kaart toont elke mogelijke eindiging van de string. Het helpt de agent om direct te zien: "Oh, dit woord 'B' komt hier voor, en het komt daar ook voor."
  2. Heavy-Light Decomposition (De Sorteerhoed): Ze splitsten de kaart op in "zware" paden (zeer veelvoorkomende paden) en "lichte" paden (zeldzame paden). Ze doen alleen het zware werk op de zeldzame paden, waardoor tijd wordt bespaard.
  3. Periodiciteit (Het Ritme): Ze merkten op dat wanneer een woord zich herhaalt (zoals "B...B"), de string vaak een ritme of patroon heeft. Ze gebruikten wiskunde om deze patronen te voorspellen in plaats van elke enkele letter te controleren.
  4. Factorization Forests (De Index): Dit is een datastructuur die fungeert als een supersnelle index, waardoor de agent kan controleren of een stuk tekst overeenkomt met een regel in constante tijd, ongeacht hoe lang de tekst is.

Samenvatting van de Conclusie

  • Kunnen we alle ReDoS-aanvallen stoppen? Nee. Als een regel te complex is (te veel "onthoud dit"-variabelen), is het wiskundig bewezen dat het traag is.
  • Kunnen we de meest voorkomende complexe regels oplossen? Ja! Voor het specifieke geval waarin een regel één woord onthoudt en het later één keer controleert (het "ABCBD"-patroon), hebben de auteurs een nieuwe engine gemaakt die bijna net zo snel is als de eenvoudige regels.
  • Waarom is dit belangrijk? Het vertelt software-engineers: "Gebruik niet te veel backreferences, anders word je traag. Maar als je ze op deze specifieke, veelvoorkomende manier gebruikt, kun je nu onze nieuwe methode gebruiken om je systeem veilig en snel te houden."

Het paper trekt in feite een lijn in het zand: Hier is waar het snelheidslimiet onbreekbaar is, en hier hebben we een manier gevonden om sneller te rijden.

Verdrinkt u in papers in uw vakgebied?

Ontvang dagelijkse digests van de nieuwste papers die bij uw onderzoekswoorden passen — met technische samenvattingen, in uw taal.

Probeer Digest →