Expressions régulières en Go : analyse complète avec exemples

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Expressions régulières en Go avec exemples : en pratique

\n\n

Les expressions régulières (regexp) sont un outil puissant pour rechercher, extraire et remplacer du texte selon un motif. En Go (Golang), le travail avec les regex est implémenté via le package standard regexp. Dans cet article, nous analyserons les fonctions principales, la syntaxe et fournirons des exemples pratiques pour vous aider à utiliser les expressions régulières en toute confiance dans vos projets.

\n\n

Fondamentaux du package regexp

\n\n

Le package regexp propose deux méthodes principales pour compiler une expression régulière :

\n\n
    \n
  • regexp.Compile(pattern string) (*Regexp, error) — compile le motif et retourne un objet Regexp ou une erreur si le motif est incorrect.
  • \n
  • regexp.MustCompile(pattern string) *Regexp — fait la même chose, mais déclenche une panic en cas d'erreur. Pratique pour les motifs statiques définis lors de l'initialisation.
  • \n
\n\n

Il est recommandé d'utiliser MustCompile pour les motifs garantis corrects (par exemple, définis dans le code) et Compile pour les motifs dynamiques provenant de l'utilisateur ou d'une source externe.

\n\n

Exemple 1 : Recherche d'une sous-chaîne (FindString)

\n\n

La fonction FindString retourne la première correspondance avec le motif sous forme de chaîne. S'il n'y a pas de correspondance, elle retourne une chaîne vide.

\n\n
package main\n\nimport (\n    "fmt"\n    "regexp"\n)\n\nfunc main() {\n    text := "Mon email : example@mail.com, secondaire : test@example.org"\n    pattern := `[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}`\n\n    re := regexp.MustCompile(pattern)\n    match := re.FindString(text)\n\n    fmt.Println("Email trouvé :", match) // Affiche : example@mail.com\n}
\n\n

Exemple 2 : Recherche de toutes les correspondances (FindAllString)

\n\n

Si vous devez trouver toutes les correspondances, utilisez FindAllString. Le deuxième argument est le nombre maximum de correspondances (-1 pour toutes).

\n\n
package main\n\nimport (\n    "fmt"\n    "regexp"\n)\n\nfunc main() {\n    text := "Codes : ABC-123, XYZ-456, QWE-789"\n    pattern := `[A-Z]{3}-\\d{3}`\n\n    re := regexp.MustCompile(pattern)\n    matches := re.FindAllString(text, -1)\n\n    fmt.Println("Codes trouvés :", matches)\n    // Affiche : [ABC-123 XYZ-456 QWE-789]\n}
\n\n

Exemple 3 : Remplacement de texte (ReplaceAllString)

\n\n

ReplaceAllString remplace toutes les correspondances du motif par la chaîne spécifiée. Vous pouvez utiliser des groupes de capture avec la syntaxe $1, $2, etc.

\n\n
package main\n\nimport (\n    "fmt"\n    "regexp"\n)\n\nfunc main() {\n    text := "Date : 2024-01-15, autre date : 2023-12-31"\n    pattern := `(\\d{4})-(\\d{2})-(\\d{2})`\n\n    re := regexp.MustCompile(pattern)\n    // Change le format de AAAA-MM-JJ à JJ.MM.AAAA\n    result := re.ReplaceAllString(text, "$3.$2.$1")\n\n    fmt.Println("Résultat :", result)\n    // Affiche : Date : 15.01.2024, autre date : 31.12.2023\n}
\n\n

Exemple 4 : Vérification de la conformité d'une chaîne au motif (MatchString)

\n\n

La fonction MatchString retourne true si la chaîne contient au moins une correspondance avec le motif.

\n\n
package main\n\nimport (\n    "fmt"\n    "regexp"\n)\n\nfunc main() {\n    emails := []string{"user@example.com", "email-invalide", "admin@site.org"}\n    pattern := `^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$`\n\n    re := regexp.MustCompile(pattern)\n    for _, email := range emails {\n        if re.MatchString(email) {\n            fmt.Printf("'%s' — email valide\\n", email)\n        } else {\n            fmt.Printf("'%s' — email NON valide\\n", email)\n        }\n    }\n    // Affiche :\n    // 'user@example.com' — email valide\n    // 'email-invalide' — email NON valide\n    // 'admin@site.org' — email valide\n}
\n\n

Exemple 5 : Extraction de données avec des groupes de capture (FindStringSubmatch)

\n\n

FindString

Blogs

Book Recommendations