Go offre de base un support des expressions régulières (ou regex, pour regular expression).
Voici quelques exemples de tâches courantes sur les |
|
package main
|
|
import "bytes"
import "fmt"
import "regexp"
|
|
func main() {
|
|
Ceci teste si un motif (“p([a-z]+)ch”) correspond à une chaîne. |
match, _ := regexp.MatchString("p([a-z]+)ch", "peach")
fmt.Println(match)
|
Au dessus nous avec utiliser un motif directement, mais pour d’autres tâches il faut la compile en une structure |
r, _ := regexp.Compile("p([a-z]+)ch")
|
Plusieurs méthodes sont disponibles. Voici le même test que celui vu plus tôt. |
fmt.Println(r.MatchString("peach"))
|
Ceci trouve l’association pour la regex. |
fmt.Println(r.FindString("peach punch"))
|
Ceci trouve également la première correspondance mais renvoie l’indice de début et fin de la correspondance, au lieu de renvoyer le text correspondant. |
fmt.Println(r.FindStringIndex("peach punch"))
|
La variante |
fmt.Println(r.FindStringSubmatch("peach punch"))
|
De la même manière, cela donne des inforamtions sur les indices de correspondances globales et les sous-correspondances. |
fmt.Println(r.FindStringSubmatchIndex("peach punch"))
|
Les variantes |
fmt.Println(r.FindAllString("peach punch pinch", -1))
|
Ces variantes |
fmt.Println(r.FindAllStringSubmatchIndex(
"peach punch pinch", -1))
|
Fournir un entier non négatif en second argument à ces fonctions limite le nombre de résultats. |
fmt.Println(r.FindAllString("peach punch pinch", 2))
|
Nos examples ci-dessus avaient comme arguments des strings et avaient des noms comme |
fmt.Println(r.Match([]byte("peach")))
|
Lorsqu’on crée des constrantes avec des expressions régulières, on peut utiliser la variation |
r = regexp.MustCompile("p([a-z]+)ch")
fmt.Println(r)
|
Le package |
fmt.Println(r.ReplaceAllString("a peach", "<fruit>"))
|
La variante |
in := []byte("a peach")
out := r.ReplaceAllFunc(in, bytes.ToUpper)
fmt.Println(string(out))
}
|
$ go run regular-expressions.go
true
true
peach
[0 5]
[peach ea]
[0 5 1 3]
[peach punch pinch]
[[0 5 1 3] [6 11 7 9] [12 17 13 15]]
[peach punch]
true
p([a-z]+)ch
a <fruit>
a PEACH
|
|
Pour une référence complète sur les expressions régulières en Go, regardez la documentation du package |
Exemple suivant: JSON.