À propos du projet
RE2 est une bibliothèque d'expressions régulières efficace et fondée sur des principes, développée à l'origine chez Google en 2006. Son objectif de conception principal est la sécurité, garantissant qu'elle peut traiter des expressions régulières provenant d'utilisateurs non fiables sans risque de backtracking catastrophique ou d'attaques par déni de service. Contrairement aux moteurs traditionnels comme PCRE, Perl ou le module re de Python, RE2 garantit que le temps de correspondance est linéaire par rapport à la longueur de la chaîne d'entrée.
Les caractéristiques clés incluent :
- **Sécurité** : RE2 évite la récursion et limite l'utilisation de la mémoire via un budget configurable, échouant gracieusement s'il est épuisé. Cela empêche les débordements de pile et les problèmes de temps d'exécution exponentiels courants dans les moteurs de backtracking.
- **Performance** : Bien qu'il ne soit pas toujours plus rapide que d'autres moteurs sur des motifs simples en raison des frais généraux d'évaluation parallèle, il offre des performances constantes sur des expressions complexes en évaluant les alternatives en parallèle plutôt que séquentiellement.
- **Support syntaxique** : En mode Perl par défaut, il accepte la plupart des opérateurs Perl mais exclut ceux nécessitant un backtracking (par exemple, les backreferences, les assertions look-around). En mode POSIX, il prend en charge la syntaxe POSIX standard (egrep) avec une correspondance la plus longue à gauche.
- **Gestion Unicode** : RE2 opère directement sur les points de code Unicode et n'effectue pas de normalisation. Les utilisateurs doivent normaliser l'entrée et les motifs au préalable si nécessaire.
La bibliothèque est implémentée en C++ et nécessite un compilateur C++17 et la bibliothèque Abseil. Elle peut être construite avec GNU make, CMake ou Bazel. Bien que native en C++, des wrappers officiels existent pour Python (`google-re2`), et des ports communautaires sont disponibles pour Node.js, Java (RE2J), JavaScript (RE2JS), D, Erlang, OCaml, Perl, R, Ruby et WebAssembly. D'autres langages comme Go et Rust offrent des bibliothèques similaires suivant les principes de RE2 mais ne partagent pas de code avec elle.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.