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 le texte



Les expressions régulières (regex) sont un outil extrêmement puissant pour rechercher, extraire et remplacer des fragments de texte selon un modèle donné. En C++, le support des expressions régulières est apparu dans la norme C++11 et est implémenté dans le fichier d'en-tête <regex>. Dans cet article, nous allons détailler comment utiliser les expressions régulières en C++ à travers des exemples pratiques.



Composants principaux de la bibliothèque <regex>



La bibliothèque <regex> comprend plusieurs classes et fonctions clés :



  • std::regex — classe représentant une expression régulière compilée.
  • std::smatch — conteneur pour stocker les résultats de recherche (pour les chaînes de type std::string).
  • std::regex_match — vérifie si toute la chaîne correspond au modèle.
  • std::regex_search — recherche la première occurrence du modèle dans la chaîne.
  • std::regex_replace — remplace les correspondances par le texte spécifié.


Examinons chacun de ces composants avec des exemples.



Exemple 1 : Vérification de la conformité d'une chaîne à un modèle (regex_match)



La fonction std::regex_match retourne true si toute la chaîne correspond entièrement à l'expression régulière. C'est idéal pour la validation de données, par exemple, la vérification d'un email ou d'un numéro de téléphone.



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

int main() { std::string email = "user@example.com"; // Modèle pour vérifier l'email (simplifié) std::regex pattern(R"([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,})"); if (std::regex_match(email, pattern)) { std::cout << "Email valide." << std::endl; } else { std::cout << "Email invalide." << std::endl; } // Exemple avec un email invalide std::string bad_email = "user@.com"; if (std::regex_match(bad_email, pattern)) { std::cout << "Email valide." << std::endl; } else { std::cout << "Email invalide." << std::endl; } return 0;}


Dans cet exemple, nous avons utilisé une chaîne brute R"(...)" pour éviter l'échappement des antislashs. Le modèle vérifie que la chaîne contient une partie locale, le signe @, un nom de domaine et un domaine de premier niveau.



Exemple 2 : Recherche d'une sous-chaîne dans un texte (regex_search)



Si vous devez trouver la première occurrence d'un modèle à l'intérieur d'une chaîne, on utilise std::regex_search. Les résultats sont stockés dans un objet std::smatch.



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

int main() { std::string text = "Mon numéro de téléphone : +7 (123) 456-78-90. Appelez-moi !"; // Modèle pour rechercher un numéro de téléphone russe std::regex phone_pattern(R"(\\+7\\s?\\(?\\d{3}\\)?\\s?\\d{3}[- ]?\\d{2}[- ]?\\d{2})"); std::smatch match; if (std::regex_search(text, match, phone_pattern)) { std::cout << "Numéro trouvé : " << match.str() << std::endl; std::cout << "Position : " << match.position() << std::endl; } else { std::cout << "Numéro non trouvé." << std::endl; } return 0;}


L'objet match contient non seulement la chaîne trouvée, mais aussi des informations sur la position de l'occurrence. La méthode match.str() retourne le fragment trouvé, et match.position() — l'indice de début de la correspondance dans la chaîne source.



Exemple 3 : Remplacement de texte avec regex_replace



La fonction std::regex_replace remplace toutes les occurrences du modèle par la chaîne spécifiée. On peut utiliser des références arrière (backrefer

Blogs

Book Recommendations