Expressions régulières en C++ avec exemples pour débutants

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 C++ avec exemples : guide complet pour débutants

\n\n

Les expressions régulières (regex) sont un outil puissant pour rechercher, vérifier et remplacer du texte selon un motif. En C++, le travail avec les expressions régulières est implémenté via la bibliothèque <regex>, apparue dans la norme C++11. Dans cet article, nous allons aborder les bases du travail avec regex en C++ à l'aide d'exemples pratiques, compréhensibles même pour les débutants.

\n\n

Que sont les expressions régulières et à quoi servent-elles ?

\n\n

Une expression régulière est une séquence de caractères définissant un motif de recherche dans un texte. Par exemple, le motif \\d{3}-\\d{2}-\\d{2} décrit le format d'un numéro SNILS : trois chiffres, un tiret, deux chiffres, un tiret, deux chiffres.

\n\n

Les principales tâches résolues par les expressions régulières en C++ :

\n\n
    \n
  • Vérification de la validité des saisies (email, téléphone, date)
  • \n
  • Extraction de données à partir d'un texte
  • \n
  • Recherche et remplacement de sous-chaînes
  • \n
  • Division de chaînes selon des séparateurs complexes
  • \n
\n\n

La bibliothèque <regex> fournit trois algorithmes principaux :

\n\n
    \n
  • std::regex_match — correspondance complète de la chaîne avec le motif
  • \n
  • std::regex_search — recherche d'une correspondance dans la chaîne
  • \n
  • std::regex_replace — remplacement des correspondances selon le motif
  • \n
\n\n

Syntaxe de base des expressions régulières en C++

\n\n

Avant d'écrire du code, examinons les éléments de base de la syntaxe regex qui seront utiles dans les exemples :

\n\n\n \n \n \n \n \n \n \n \n \n \n \n
CaractèreSignificationExemple
.N'importe quel caractère (sauf saut de ligne)c.t — cat, cot, cut
\\dChiffre (0-9)\\d\\d — 23, 45, 99
\\wLettre, chiffre ou tiret bas\\w+ — mot
\\sCaractère d'espacement\\s+ — un ou plusieurs espaces
*0 répétition ou plusab*c — ac, abc, abbc
+1 répétition ou plusab+c — abc, abbc (pas ac)
?0 ou 1 répétitioncolou?r — color, colour
{n}Exactement n répétitions\\d{3} — 123, 456
[abc]N'importe quel caractère de l'ensemble[aeiou] — voyelle
()Groupe de capture(\\d{2})-(\\d{2})
\n\n

Exemple 1 : Vérification d'une adresse email avec regex_match

\n\n

Commençons par quelque chose de simple — vérifions si une chaîne correspond au format email. Utilisons std::regex_match, qui exige une correspondance complète.

\n\n
#include <iostream>\n#include <regex>\n#include <string>\n\nint main() {\n    std::string email = "user@example.com";\n    // Motif simple pour email :\n    // [\\w.]+ — un ou plusieurs caractères (lettres, chiffres, point, tiret bas)\n    // @ — symbole arobase\n    // [\\w.]+ — nom de domaine\n    // \\.[a-z]{2,} — point et domaine de premier niveau (au moins 2 lettres)\n    std::regex pattern(R"([\\w.]+@[\\w.]+\\.\\w{2,})");\n    \n    if (std::regex_match(email, pattern)) {\n        std::cout << "Email valide" << std::endl;\n    } else {\n        std::cout << "Email invalide" << std::endl;\n    }\n    \n    // Exemple avec un email invalide\n    email = "user@com";\n    if (std::regex_match(email, pattern)) {\n        std::cout << "Email valide" << std::endl;\n    } else {\n        std::cout << "Email invalide" << std::endl;\n    }\n    \n    return 0;\n}
\n\n

Résultat de l'exécution :

\n
Email valide\nEmail invalide
\n\n

Notez que

Blogs

Book Recommendations