Maison >développement back-end >Golang >Comment puis-je simuler un lookbehind négatif dans les expressions régulières Go ?
Simulation Lookbehind négative dans Go
Dans Go, les assertions Lookbehind négatives ne sont pas prises en charge pour des raisons de performances. Cela peut présenter des difficultés lorsque l'on tente de faire correspondre des modèles à l'aide d'opérateurs lookbehind.
Par exemple, un lookbehind négatif peut être utilisé pour extraire une commande d'une chaîne, en excluant tous les caractères de début de l'ensemble [@#/]. Utilisation d'une assertion d'apparence négative :
\b(?<![@#\/])\w.*
Cependant, cette expression régulière ne sera pas compilée dans Go en raison du manque de prise en charge de l'apparence négative.
Approche alternative
Au lieu de cela, nous pouvons remplacer le lookbehind négatif par un jeu de caractères nié, qui correspond à tout caractère ne figurant pas dans le set.
Regex mis à jour :
\b[^@#/]\w.*
Si les caractères principaux de l'ensemble [@#/] sont autorisés au début de la chaîne, nous pouvons utiliser le ^ ancre :
(?:^|[^@#\/])\b\w.*
Fonction de filtre
Alternativement, nous peut utiliser une fonction de filtre dans Go pour filtrer les chaînes qui commencent par des caractères de l'ensemble [@#/].
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 }
Fonction de processus
Nous pouvons également créer une fonction de processus qui utilise la fonction de filtre :
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, " ") }
Cette fonction de processus peut être utilisée pour transformer les chaînes d'entrée, en supprimant tous les mots commençant par des caractères de l'ensemble [@#/].
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!