Un ensemble d'expressions régulières niées ne fonctionne pas dans Go
Un utilisateur a rencontré un problème où une expression régulière avec un ensemble nié ne fonctionnait pas comme attendu dans Go. L'expression, vérifiée sur plusieurs analyseurs d'expressions régulières en ligne, était destinée à faire correspondre des chaînes qui ne se terminaient pas par des extensions de fichier spécifiques.
^(.*\.(?!(htm|html|class|js)$))?[^.]
Cependant, l'implémentation de cette expression dans Go a donné des résultats différents. L'utilisateur a simplifié l'expression pour supprimer l'ensemble nié et obtenu les correspondances souhaitées.
Comprendre le problème
Le moteur d'expression régulière de Go, RE2, ne prend pas en charge les opérateurs de recherche comme le anticipation négative ?! utilisé dans l’expression originale. Cette absence de prise en charge de la recherche a rendu l'ensemble annulé inefficace.
Solution
Pour garantir qu'une chaîne se termine par une extension de fichier à trois caractères, l'utilisateur peut simplifier l'expression to :
\.\w{3}$
Cette expression correspond à un point littéral, suivi de trois caractères de mot (alphanumériques et trait de soulignement), suivis de la fin de la chaîne. Il obtient effectivement le même résultat que l'expression originale mais sans recourir aux opérateurs de recherche.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!