Bien que Go ne prenne pas en charge nativement les lookbehinds négatifs dans les expressions régulières pour des raisons de performances, une stratégie alternative peut être utilisée pour obtenir des fonctionnalités similaires.
Considérez l'expression régulière originale :
\b(?<![@#\/])\w.*
Depuis le le lookbehind nié examine uniquement un jeu de caractères, il peut être remplacé par un jeu de caractères nié lui-même :
\b[^@#/]\w.*
Si des caractères peuvent apparaître au début de la chaîne, ajoutez l'ancre ^ :
(?:^|[^@#\/])\b\w.*
Pour une approche plus fine, une fonction de filtre peut être implémentée :
func Filter(vs []string, f func(string) bool) []string { vsf := make([]string, 0) for _, v := range vs { if f(v) { vsf = append(vsf, v) } } return vsf }
Cette fonction de filtre peut ensuite être employée dans un Processus function :
func Process(inp string) string { t := strings.Split(inp, " ") t = Filter(t, func(x string) bool { return strings.Index(x, "#") != 0 && strings.Index(x, "@") != 0 && strings.Index(x, "/") != 0 }) return strings.Join(t, " ") }
Dans l'ensemble, ces techniques permettent l'émulation de lookbehinds négatifs dans Go, fournissant ainsi une solution de contournement au manque de prise en charge linguistique directe pour cette fonctionnalité.
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!