Maison >développement back-end >Golang >Comment comprenez-vous les modèles de remplacement dans la méthode ReplaceAllString de Go ?
Comprendre la méthode ReplaceAllString de Go
Dans Go, la méthode ReplaceAllString du package regexp permet le remplacement des sous-chaînes correspondantes dans une chaîne. Cette fonctionnalité peut s'avérer utile lorsque vous travaillez avec des expressions régulières.
L'exemple fourni cherche à démontrer divers scénarios utilisant cette méthode :
<code class="go">package main import ( "fmt" "regexp" ) func main() { re := regexp.MustCompile("a(x*)b") fmt.Println(re.ReplaceAllString("-ab-axxb-", "T")) fmt.Println(re.ReplaceAllString("-ab-axxb-", "")) fmt.Println(re.ReplaceAllString("-ab-axxb-", "W")) fmt.Println(re.ReplaceAllString("-ab-axxb-", "W")) }</code>
Le premier résultat est simple :
-T-T-
Cependant, les trois sorties restantes évoquent la confusion :
--xx- --- -W-xxW-
Comprendre les modèles de remplacement
La documentation de ReplaceAllString explique que les signes "$" dans le remplacement Les chaînes sont interprétées comme dans la fonction Expand.
Expand définit une référence de variable dans un modèle comme une sous-chaîne de la forme "$name" ou "${name}", où "name" est un non vide séquence de caractères (lettres, chiffres ou traits de soulignement). Il est important de noter que les variables font référence à la séquence la plus longue possible, donc "$1x" est égal à "${1x}", et non à "${1}x".
Le troisième remplacement
Dans le troisième remplacement, "$1W" est traité comme "${1W}". Cependant, ce groupe n'est pas initialisé et n'a aucune correspondance correspondante dans l'expression régulière. Par conséquent, une chaîne vide remplace le groupe.
Les deuxième et quatrième remplacements
En revanche, les deuxième et quatrième remplacements sont plus simples à saisir. "$1" fait référence aux caractères capturés par le premier groupe de capture (mis entre parenthèses).
Lève l'ambiguïté du modèle de remplacement
Pour obtenir des résultats cohérents, on peut utiliser des captures nommées , noté "?P
Captures nommées en action
Voici un exemple modifié qui introduit la capture nommée :
<code class="go">package main import ( "fmt" "regexp" ) func main() { re := regexp.MustCompile("a(?P<1W>x*)b") fmt.Println(re.ReplaceAllString("-ab-axxb-", "T")) fmt.Println(re.ReplaceAllString("-ab-axxb-", "")) fmt.Println(re.ReplaceAllString("-ab-axxb-", "W")) fmt.Println(re.ReplaceAllString("-ab-axxb-", "W")) }</code>
Le résultat garantit désormais la cohérence :
-T-T- --xx- --xx- -W-xxW-
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!