Expressions régulières en C++ : guide complet 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 C++ : un outil puissant pour travailler avec les chaînes de caractères

Les expressions régulières (regex) sont un langage formel de recherche et de manipulation de sous-chaînes dans un texte basé sur des motifs. En C++, le support des expressions régulières est apparu avec la norme C++11 et est implémenté dans la bibliothèque <regex>. C'est un outil indispensable pour la validation de données, l'analyse de logs, la recherche de motifs et le remplacement de texte.

Dans cet article, nous allons détailler les fonctions principales de la bibliothèque regex, apprendre à composer des motifs et examiner des exemples pratiques avec du code.



1. Types et fonctions principaux de la bibliothèque <regex>

Pour travailler avec les expressions régulières en C++, trois classes principales sont utilisées :

  • std::regex — représente l'expression régulière elle-même (le motif).
  • std::smatch — un conteneur pour stocker les résultats de recherche (pour les chaînes de type std::string).
  • std::cmatch — un équivalent pour les chaînes C (const char*).

Fonctions clés pour appliquer les regex :

  • std::regex_match() — vérifie si la chaîne entière correspond au motif.
  • std::regex_search() — recherche la première correspondance avec le motif dans la chaîne.
  • std::regex_replace() — remplace toutes les correspondances par un texte donné.


#include <iostream>#include <regex>#include <string>

int main() { std::string text = "Mon numéro : +7-123-456-78-90"; std::regex pattern(R"(\\+7-\\d{3}-\\d{3}-\\d{2}-\\d{2})");

if (std::regex_search(text, pattern)) { std::cout << "Numéro trouvé !" << std::endl; }

// Extraction de la correspondance std::smatch match; if (std::regex_search(text, match, pattern)) { std::cout << "Numéro trouvé : " << match[0] << std::endl; }

return 0;}


2. Syntaxe des expressions régulières : métacaractères et quantificateurs

Les motifs regex en C++ utilisent une syntaxe similaire à ECMAScript (par défaut). Voici les éléments de base :

  • Point (.) — n'importe quel caractère unique, sauf le saut de ligne.
  • Astérisque (*) — 0 ou plusieurs répétitions du caractère précédent.
  • Plus (+) — 1 ou plusieurs répétitions.
  • Point d'interrogation (?) — 0 ou 1 répétition (rend le caractère optionnel).
  • Crochets ([]) — classe de caractères (par exemple, [0-9] — n'importe quel chiffre).
  • Parenthèses (()) — regroupement et capture de sous-chaîne.
  • Barre verticale (|) — OU logique.
  • Symbole ^ — début de la chaîne.
  • Symbole $ — fin de la chaîne.

Exemples de quantificateurs :

  • \\d{3} — exactement 3 chiffres.
  • \\w{2,4} — de 2 à 4 caractères alphanumériques.
  • [A-Za-z]+ — une ou plusieurs lettres latines.


#include <iostream>#include <regex>#include <string>

int main() { std::string email = "user@example.com"; // Motif simple pour email std::regex email_pattern(R"([\\w.+-]+@[\\w-]+\\.[\\w.]+)");

if (std::regex_match(email, email_pattern)) { std::cout << "Email valide." << std::endl; } else { std::cout << "Email invalide." << std::endl; }

// Vérification de numéro de téléphone std::string phone = "+7 (495) 123-45-67"; std::regex phone_pattern(R"(\\+7\\s?\\(?\\d{3}\\)?\\s?\\d{3}-?\\d{2}-?\\d{2})");

if (std::regex_match(phone, phone_pattern)) { std::cout << "Téléphone valide." << std::endl; }

return 0;}


3. Extraction de données à l'aide de groupes de capture

Les groupes de capture

Blogs

Book Recommendations