Maison  >  Article  >  développement back-end  >  Comment implémenter un ensemble négatif dans Regex for Go : un guide pour éviter les résultats inattendus

Comment implémenter un ensemble négatif dans Regex for Go : un guide pour éviter les résultats inattendus

Susan Sarandon
Susan Sarandonoriginal
2024-10-26 07:23:02754parcourir

 How to Implement Negative Set in Regex for Go: A Guide to Avoiding Unexpected Results

Implémentation d'un ensemble négatif dans Regex for Go

L'expression régulière fournie vise à capturer les noms de fichiers qui ne se terminent pas par des extensions de fichiers spécifiques (par ex. , htm, html, classe, js). Cependant, l'implémentation dans Go à l'aide du package regexp donne des résultats différents de ceux des analyseurs d'expressions régulières en ligne.

Cette divergence se produit parce que le moteur d'expression régulière RE2 de la bibliothèque standard Go ne prend pas en charge les analyses anticipées négatives (c'est-à-dire l'opérateur ?! utilisé dans le expression originale). Par conséquent, il ne peut pas exclure les chaînes se terminant par les extensions de fichier spécifiées.

Pour reproduire le comportement de l'analyseur d'expressions régulières en ligne, vous pouvez envisager les approches suivantes :

  • Utilisez une analyse positive (?!.(htm|html|class|js)$) : Cela affirme que la chaîne d'entrée ne se termine pas par l'une des extensions de fichier spécifiées.
<code class="go">re := regexp.MustCompile(`^(.*\.(?!(htm|html|class|js)$))([^.]*)$`)</code>
  • Utiliser un Lookbehind négatif (? Cela affirme que la chaîne d'entrée n'est précédée d'aucune des extensions de fichier spécifiées.
<code class="go">re := regexp.MustCompile(`^(.*?)(?<!\.(htm|html|class|js)$)`)</code>
  • Supprimer l'ensemble négatif et utiliser l'extension de fichier littérale : Si vous devez uniquement vous assurer que la chaîne se termine par une extension de fichier à trois caractères, vous pouvez simplifiez l'expression en :
<code class="go">re := regexp.MustCompile(`.\w{3}$`)</code>

Notez que ces expressions peuvent donner des résultats différents car elles implémentent la logique de différentes manières. Choisir l'approche qui correspond le mieux à votre cas d'utilisation est essentiel.

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