Maison >développement back-end >Golang >Pourquoi mon ensemble Regex annulé échoue-t-il lors de Go ?

Pourquoi mon ensemble Regex annulé échoue-t-il lors de Go ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-26 03:14:27840parcourir

Why Does My Regex Negated Set Fail in Go?

L'ensemble d'expressions regex annulées ne fonctionne pas dans Go

Dans cet article, nous explorons une expression regex qui ne parvient pas à faire correspondre les chaînes dans Golang car elle fait dans les analyseurs de regex en ligne. Le problème vient du fait que l'ensemble nié n'est pas pris en charge dans le moteur d'expression régulière de la bibliothèque standard de Go, RE2.

L'expression régulière en question est conçue pour faire correspondre les chaînes qui :

  • Se terminent par une extension de fichier (par exemple, ".htm", ".html", ".class", ".js") comme un ensemble négatif (c'est-à-dire ne terminez pas par ces extensions).
  • Terminez par tout caractère non mentionné dans l'ensemble négatif et non un point (.)

L'implémentation de cette expression dans Golang ne produit pas les mêmes correspondances que le démontre l'analyseur d'expressions régulières en ligne car RE2, utilisé par la bibliothèque standard de Golang, ne prend pas en charge des opérateurs de recherche comme l'opérateur de recherche négatif ("?!").

Pour résoudre ce problème, nous avons deux options :

  • Utiliser une bibliothèque prenant en charge la recherche : Nous pouvons implémenter l'anticipation négative à l'aide d'une bibliothèque qui prend en charge le lookaround, telle que le package "github.com/google/re2/regexp".
  • Simplifiez l'expression : Si tout ce que nous Ce dont nous avons besoin est de nous assurer que la chaîne se termine par une extension de fichier à trois caractères, nous pouvons simplifier l'expression en ".w{3}$" qui correspond à un point littéral suivi de trois caractères à la fin de la chaîne.

En utilisant l'une ou l'autre de ces approches, nous pouvons obtenir le comportement de correspondance souhaité dans Golang.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn