10 000 regexen hein ? Eric Wendelin La suggestion d'une hiérarchie semble être une bonne idée. Avez-vous pensé à réduire l'énormité de ces regexen à quelque chose comme une structure arborescente ?
Un exemple simple : Toutes les regexen nécessitant un nombre pourraient se ramifier à partir d'une regex vérifiant ce nombre, toutes les regexen n'en nécessitant pas se ramifiant à leur tour. De cette façon, vous pourriez réduire le nombre de comparaisons réelles à un chemin le long de l'arbre au lieu de faire chaque comparaison sur 10 000.
Cela nécessiterait de décomposer le regexen fourni en genres, chaque genre ayant un test partagé qui les exclurait en cas d'échec. De cette façon, vous pourriez théoriquement réduire considérablement le nombre de comparaisons réelles.
Si vous deviez effectuer cette opération au moment de l'exécution, vous pourriez analyser les expressions régulières données et les "classer" dans des genres prédéfinis (le plus facile à faire) ou dans des genres comparatifs générés à ce moment-là (moins facile à faire).
Votre exemple de comparaison de "hello" avec "[H|h]ello" et ".{0,20}ello" ne sera pas vraiment aidé par cette solution. Un cas simple où cela pourrait être utile serait le suivant : si vous avez 1000 tests qui ne renvoient vrai que si "ello" existe quelque part dans la chaîne et que votre chaîne de test est "goodbye", vous n'aurez qu'à faire le seul test sur "ello" et vous saurez que les 1000 tests qui l'exigent ne fonctionneront pas, et de ce fait, vous n'aurez pas à les faire.