← Derniers articles
💬 NLP

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

Cet article établit la complexité computationnelle fine de la correspondance d'expressions régulières avec des références arrières en prouvant des bornes inférieures conditionnelles sous les hypothèses SETH et de détection de triangles, tout en présentant un algorithme amélioré en O(nlog2n)O(n \log^2 n) pour les références arrières à usage unique.

Auteurs originaux : Soh Kumabe, Yuya Uezato

Publié 2026-05-11
📖 7 min de lecture🧠 Analyse approfondie

Auteurs originaux : Soh Kumabe, Yuya Uezato

Article original sous licence CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). Ceci est une explication générée par l'IA de l'article ci-dessous. Elle n'a pas été rédigée ni approuvée par les auteurs. Pour une précision technique, consultez l'article original. Lire la clause de non-responsabilité complète

La vue d'ensemble : L'embouteillage « Regex »

Imaginez que vous êtes un agent de sécurité dans une boîte de nuit (le système informatique). Vous avez une liste de règles (une Expression Régulière) pour savoir qui peut entrer.

  • Règles simples : « Seules les personnes portant un t-shirt rouge. » C'est facile à vérifier. Vous regardez un t-shirt, dites « Rouge ? Oui, entrez. » Cela prend le même temps que la file soit de 10 personnes ou de 10 000.
  • Le problème (ReDoS) : Parfois, des pirates créent une file de personnes spécifique qui trompe l'agent pour qu'il effectue une quantité massive de travail inutile. Au lieu de vérifier une personne et de passer à la suivante, l'agent commence par vérifier la personne A, puis la personne B, puis la personne A à nouveau, puis la personne C, puis la personne A encore... jusqu'à ce que l'agent s'effondre d'épuisement. Cela s'appelle une attaque par Déni de Service (ReDoS).

Dans le monde réel, cela a fait planter d'énormes sites web comme Stack Overflow et Cloudflare. Le papier note qu'une lenteur même « quadratique » (où vérifier 100 personnes prend 10 000 étapes) suffit à faire planter un système.

Le méchant : Les « Références arrières »

Les règles standard sont simples. Mais les moteurs « Regex » modernes possèdent une fonctionnalité surpuissante appelée Références arrières.

L'analogie :
Imaginez une règle qui dit : « Trouvez un mot, souvenez-vous-en, puis assurez-vous que le même mot exact apparaît plus tard. »

  • Exemple : « Trouvez un mot, appelez-le 'X'. Ensuite, trouvez 'X' à nouveau. »
  • Si l'entrée est pomme ... pomme, cela fonctionne.
  • Si l'entrée est pomme ... banane, cela échoue.

Cette fonctionnalité est incroyablement utile pour les programmeurs, mais elle rend le travail de l'« agent » beaucoup plus difficile. L'agent doit se souvenir de ce qu'il a vu plus tôt et le comparer constamment à ce qu'il voit maintenant. Le papier demande : Pouvons-nous construire un agent assez rapide pour gérer ces règles complexes sans s'épuiser ?

Les découvertes du papier : Le Bon, Le Mauvais et Le Moche

Les auteurs ont examiné exactement à quel point il est difficile de résoudre ces problèmes de correspondance. Ils les ont décomposés en deux aspects : la Difficulté (Pourquoi c'est difficile) et les Algorithmes (Comment le résoudre).

1. La mauvaise nouvelle : Certaines règles sont impossibles à accélérer

Le papier prouve que pour certains types de règles complexes, il n'existe pas de « solution miracle » pour les rendre rapides.

  • Le problème du « Triangle » : Ils ont montré que si vous avez une règle utilisant deux variables (comme se souvenir de deux mots différents et les vérifier plus tard), le résoudre est aussi difficile que de trouver un triangle dans un immense graphe de réseau social. Si vous pouviez résoudre la règle rapidement, vous pourriez résoudre le problème du graphe rapidement. Puisque les experts en graphes pensent que le problème du graphe est intrinsèquement lent, le problème de la règle doit l'être aussi.
  • Le problème des « Vecteurs orthogonaux » : Pour les règles avec encore plus de variables, ils ont prouvé que le temps requis croît de manière exponentielle avec le nombre de variables. C'est comme essayer de trouver une combinaison spécifique de clés dans une serrure ; plus vous avez de clés, plus il devient impossible de la forcer rapidement par force brute.

À retenir : Si votre règle est trop complexe (utilisant de nombreuses fonctionnalités « souvenez-vous de ceci »), vous ne pouvez pas construire un moteur rapide pour elle. Vous rencontrerez toujours un mur.

2. La bonne nouvelle : Une solution « quasi-linéaire » pour les cas simples

Cependant, le papier a trouvé un point idéal. Ils se sont concentrés sur un type de règle spécifique et courant :

  • Le motif « ABCBD » : « Trouvez un mot (A), puis un mot (B), puis un mot (C), puis le même mot B exact, puis un mot (D). »
    • Exemple réel : « Trouvez un nom d'utilisateur, puis un mot de passe, puis un message, puis le même nom d'utilisateur à nouveau, puis une signature. »

Les auteurs ont découvert que bien que cela semble délicat, cela peut être résolu très efficacement.

  • L'ancienne méthode : Les méthodes précédentes consistaient à vérifier chaque combinaison possible dans une bibliothèque, ce qui prenait un temps O(n2)O(n^2) (quadratique). Si le livre faisait 1 000 pages, cela prenait 1 000 000 d'étapes.
  • La nouvelle méthode : Les auteurs ont construit un nouvel algorithme qui prend environ O(nlog2n)O(n \log^2 n) temps.
    • L'analogie : Imaginez que la bibliothèque est organisée avec un système d'index magique (utilisant des Arbres de suffixes et des Forêts de factorisation). Au lieu de lire chaque page, l'agent peut sauter directement aux sections pertinentes. Si le livre fait 1 000 pages, la nouvelle méthode prend environ 10 000 étapes (ou même moins), ce qui est une amélioration massive.

Comment fonctionne le nouvel algorithme (Les « tours de magie »)

Pour atteindre cette vitesse, les auteurs ont utilisé plusieurs techniques astucieuses, qu'ils décrivent dans le papier :

  1. L'Arbre de suffixes (La Carte) : Ils ont construit une immense carte de la chaîne d'entrée. Cette carte montre chaque fin possible de la chaîne. Elle aide l'agent à voir instantanément : « Oh, ce mot 'B' apparaît ici, et il apparaît aussi là. »
  2. La Décomposition lourde-légère (Le Chapeau Trieur) : Ils ont divisé la carte en chemins « lourds » (chemins très communs) et « légers » (chemins rares). Ils ne font le gros du travail que sur les chemins rares, ce qui économise du temps.
  3. La Périodicité (Le Rythme) : Ils ont remarqué que lorsqu'un mot se répète (comme « B...B »), la chaîne a souvent un rythme ou un motif. Ils ont utilisé les mathématiques pour prédire ces motifs au lieu de vérifier chaque lettre individuellement.
  4. Les Forêts de factorisation (L'Index) : Il s'agit d'une structure de données qui agit comme un index ultra-rapide, permettant à l'agent de vérifier si un morceau de texte correspond à une règle en temps constant, quelle que soit la longueur du texte.

Résumé de la conclusion

  • Peut-on arrêter toutes les attaques ReDoS ? Non. Si une règle est trop complexe (trop de variables « souvenez-vous de ceci »), il est prouvé mathématiquement qu'elle est lente.
  • Peut-on résoudre les règles complexes les plus courantes ? Oui ! Pour le cas spécifique où une règle se souvient d'un mot et le vérifie une fois plus tard (le motif « ABCBD »), les auteurs ont créé un nouveau moteur presque aussi rapide que les règles simples.
  • Pourquoi cela importe-t-il ? Cela dit aux ingénieurs logiciels : « N'utilisez pas trop de références arrières, sinon vous serez lents. Mais si vous les utilisez de cette manière spécifique et courante, vous pouvez maintenant utiliser notre nouvelle méthode pour garder votre système sûr et rapide. »

Le papier trace essentiellement une ligne dans le sable : Voici où la limite de vitesse est inviolable, et voici où nous avons trouvé un moyen de rouler plus vite.

Noyé(e) sous les articles dans votre domaine ?

Recevez des digests quotidiens des articles les plus récents correspondant à vos mots-clés de recherche — avec des résumés techniques, dans votre langue.

Essayer Digest →