Maison >développement back-end >Golang >Comment contourner les lookarounds dans Go Regex ?

Comment contourner les lookarounds dans Go Regex ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-30 16:45:11201parcourir

How to Work Around Lookarounds in Go Regex?

Erreur d'analyse de l'expression régulière : syntaxe Perl invalide (?!

Lors de la tentative d'utilisation d'une expression régulière dans Go, une erreur est rencontrée :

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

Cette erreur se produit spécifiquement avec les éléments suivants regex :

regexp.MustCompile("^(?!On.*On\s.+?wrote:)(On\s(.+?)wrote:)$")

Solution

Le problème se pose car Go regex ne prend pas en charge les lookarounds, contrairement aux Lookarounds qui sont des assertions qui vérifient le texte environnant sans le consommer.

Pour contourner cette limitation, utilisez une approche différente :

Tout d'abord, compilez deux règles régulières distinctes expressions :

first := regexp.MustCompile(`^On\s(.+?)wrote:$`)
second := regexp.MustCompile(`^On.*On\s.+?wrote:`)
Ensuite, effectuez les étapes suivantes :

    Vérifiez si la première correspond à la chaîne.
  1. Si c'est le cas, passez à l'étape 3. Sinon , la chaîne ne correspond à aucune expression, alors retournez true.
  2. Vérifiez si second correspond à la chaîne.
  3. Si c'est le cas, la chaîne correspond la deuxième expression, alors retournez false. Sinon, retournez true.
Vous pouvez également utiliser un groupe de capture facultatif pour simplifier le processus :

regex := regexp.MustCompile(`^On(.*On)?\s.+?wrote:`)
Vérifiez une correspondance et renvoie vrai si :

    Le groupe 1 se termine par On.
  • Le groupe 1 n'existe pas ou ne se termine pas par On.
Sinon, renvoie false.

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