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

Comment comprenez-vous les modèles de remplacement dans la méthode ReplaceAllString de Go ?

Linda Hamilton
Libérer: 2024-10-28 02:45:30
original
825 Les gens l'ont consulté

How do you understand the replacement patterns in Go's ReplaceAllString method?

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>
Copier après la connexion

Le premier résultat est simple :

-T-T-
Copier après la connexion

Cependant, les trois sorties restantes évoquent la confusion :

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

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..." dans le modèle d'expression régulière. Cela nomme explicitement le groupe de capture pour un référencement sans ambiguïté.

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>
Copier après la connexion

Le résultat garantit désormais la cohérence :

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

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!