Maison  >  Article  >  développement back-end  >  Comment contourner les lookarounds dans les expressions régulières Go ?

Comment contourner les lookarounds dans les expressions régulières Go ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-24 11:30:16944parcourir

How to Work Around Lookarounds in Go Regular Expressions?

Erreur d'analyse de l'expression régulière : syntaxe Perl invalide - Comprendre le problème et trouver une solution de contournement

Lors de la tentative de compilation de l'expression régulière "^(? !On.*On\s. ?write:)(On\s(. ?)write:)$" dans Go, une erreur courante rencontrée est :

error parsing regexp: invalid or unsupported Perl syntax: (?!

Cette erreur provient du fait que Go ne prend pas en charge les lookarounds, une fonctionnalité de syntaxe disponible dans les expressions régulières Perl qui permet des anticipations négatives comme (?!.

Comprendre la syntaxe Lookaround

Dans les expressions régulières, un lookaround est un métacaractère qui affirme une condition sans consommer de caractères à partir de la chaîne d'entrée. Une anticipation négative, notée (?!, affirme que l'expression suivante ne doit pas correspondre à la position actuelle.

Go Regex Workaround

As Go ne prend pas en charge les recherches, l'expression régulière ci-dessus ne peut pas être utilisée directement. Au lieu de cela, une solution de contournement utilisant plusieurs expressions régulières et vérifications conditionnelles est disponible. requis :

r1 := regexp.MustCompile(`^On\s(.+?)wrote:$`)
r2 := regexp.MustCompile(`^On.*On\s.+?wrote:`)
match1 := r1.MatchString(inputString)
match2 := r2.MatchString(inputString)
if match1 && !match2 {
    // The string does not contain "On ... On" but contains "On ..."
   // Handle match
}

Vous pouvez également utiliser un groupe de capture facultatif et vérifier le contenu du groupe après une correspondance réussie :

r := regexp.MustCompile(`^On(.*On)?\s.+?wrote:`)
match := r.FindStringSubmatch(inputString)
if match != nil {
   // Handle match
   if match[1] != "" {
      // Group 1 ends with "On"
   }
}

Notes supplémentaires

  • Utilisez la fonction regexp.MustCompile pour compiler les modèles d'expressions régulières, car elle panique sur les expressions non valides, simplifiant ainsi les erreurs manipulation.
  • Les solutions de contournement fournies reposent sur l'hypothèse que la chaîne d'entrée suit le format spécifié. Ajustez les expressions régulières en conséquence si le format varie.

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