Maison > développement back-end > Golang > le corps du texte

Voici quelques titres basés sur des questions, en gardant à l'esprit la nature déroutante des résultats : Option 1 (Focus sur le puzzle) : * Pourquoi `regexp.ReplaceAllString` de Go produit-il ces sorties inattendues ?

Susan Sarandon
Libérer: 2024-10-27 20:23:02
original
879 Les gens l'ont consulté

Here are a few question-based titles, keeping in mind the puzzling nature of the outputs:

Option 1 (Focus on the Puzzle):
* Why Does Go's `regexp.ReplaceAllString` Produce These Unexpected Outputs?

Option 2 (Focus on the

Décodage du puzzle ReplaceAllString de Go

Dans la bibliothèque standard Go, regexp.ReplaceAllString offre un moyen flexible de remplacer des sous-chaînes en fonction d'un modèle d'expression. Mais comprendre son comportement peut être déroutant, comme le démontre un résultat déroutant :

<code class="go">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>
Copier après la connexion

Le résultat est :

-T-T-
--xx-
-
-W-xxW-
Copier après la connexion

Bien que le premier cas soit clair, les trois derniers sont déroutants.

Expliquer les remplacements

La clé réside dans la compréhension du rôle de $ dans le modèle de remplacement. Selon la documentation, $ est interprété comme dans la fonction Expand de text/template.

Dans Expand, $name fait référence à une variable, et si elle n'est pas trouvée ou n'est pas initialisée, elle est remplacée par une chaîne vide.

Résultat n° 2 (${1})

${1} fait référence au premier groupe de capture, qui est x*. Dans la chaîne d'entrée, ce groupe correspond à "xx", ce qui donne "--xx-" comme sortie.

Résultat 3 (${1}W)

Ici, ${1}W fait référence au "premier" groupe de capture (x*) et ajoute "W". Cependant, comme il n'y a pas de groupe explicite appelé « 1W » dans le modèle, il n'est pas initialisé. Par conséquent, il est remplacé par une chaîne vide, donnant "-".

Résultat n°4 (${1}W avec captures nommées)

Comme alternative, nommé les captures peuvent être utilisées pour lever l'ambiguïté du modèle de remplacement :

<code class="go">re := regexp.MustCompile("a(?P<1W>x*)b")
fmt.Println(re.ReplaceAllString("-ab-axxb-", "W"))</code>
Copier après la connexion

Dans ce cas, "$1W" fait référence au groupe nommé 1W, qui capture le "xx". Ainsi, le résultat se lit désormais : "-W-xxW-".

Conclusion

Comprendre la gestion spécifique de "$" et le rôle des captures nommées est crucial pour déchiffrer le comportement de regexp.ReplaceAllString. En adaptant soigneusement les modèles de remplacement, les développeurs peuvent obtenir un contrôle précis sur le remplacement des sous-chaînes dans leurs programmes Go.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!