Maison > Article > développement back-end > Comment contourner les lookarounds dans les expressions régulières Go ?
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
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!