web-dev-qa-db-fra.com

Golang: extraire des données avec Regex

J'essaie d'extraire toutes les données à l'intérieur de ${}.

Par exemple, les données extraites de cette chaîne doivent être abc.

git commit -m '${abc}'

Voici le code actuel:

re := regexp.MustCompile("${*}")
match := re.FindStringSubmatch(command)

Mais ça ne marche pas, aucune idée?

6
Alex. b

Vous devez échapper à $, { et } dans l'expression régulière.

re := regexp.MustCompile("\\$\\{(.*?)\\}")
match := re.FindStringSubmatch("git commit -m '${abc}'")
fmt.Println(match[1])

Démo Golang

En regex,

$ <-- End of string
{} <-- Contains the range. e.g. a{1,2}

Vous pouvez aussi utiliser

re := regexp.MustCompile(`\$\{([^}]*)\}`)
17
rock321987

Essayez re: = regexp.MustCompile(\$\{(.*)\}) * Est un quantificateur, vous avez besoin de quelque chose à quantifier. . ferait comme il correspond à tout.

2
Hermes Martinez

Parce que $, { et } ont tous une signification spéciale dans une expression rationnelle et doivent être inversés pour correspondre à ces caractères littéraux, car * ne fonctionne pas de cette façon et parce que vous n'avez pas réellement inclus de groupe de capture pour les données que vous souhaitez. Capturer. Essayer:

re := regexp.MustCompile(`\$\{.+?)\}`)
1
hobbs