Table des matières
Inclure l'en-tête regex
Correspondance de modèle de base avec std :: regex_match
Correspondance partielle avec std :: regex_search
Extraction de pièces assorties avec STD :: Smatch
Remplacer le texte par std :: regex_replace
Drapeaux regex communs
Conseils de performance
Résumé des fonctions clés
Maison développement back-end C++ Comment utiliser des expressions régulières en c

Comment utiliser des expressions régulières en c

Aug 12, 2025 am 10:46 AM
Expressions régulières c++

Pour utiliser des expressions régulières en C, vous devez inclure le fichier d'en-tête et utiliser les fonctions qu'il fournit pour la correspondance des modèles et le traitement de texte. 1. Utilisez Std :: Regex_Match pour correspondre à la chaîne complète, et renvoyez True uniquement lorsque la chaîne entière se conforme au modèle; 2. Utilisez Std :: Regex_Search pour trouver des correspondances à n'importe quelle position de la chaîne; 3. Utilisez STD :: Smatch pour extraire le groupe de capture, obtenez la correspondance complète via des correspondances [0], des matchs [1] et des sous-matchs ultérieurs; 4. Utilisez STD :: Regex_Replace pour remplacer le texte correspondant et prendre en charge le groupe de capture par des références telles que 1 $ et 2 $; 5. Vous pouvez ajouter l'icône (ignorer le boîtier), le multiline (modèle multi-ligne) et d'autres indicateurs lors de la construction du regex pour ajuster le comportement de correspondance; 6. Pour améliorer les performances, les objets regex doivent être réutilisés pour éviter la construction répétée dans la boucle. La bibliothèque régulière de C 11 est puissante pour valider, extraire et convertir du texte, recommandé pour les opérations régulières de base en intermédiaires et faire attention à la compatibilité du compilateur pour la portabilité.

Comment utiliser des expressions régulières en C

L'utilisation d'expressions régulières en C est devenue simple avec l'introduction de l'en-tête <regex></regex> en C 11. Cette bibliothèque fournit des outils pour la correspondance de motifs et la manipulation du texte. Voici comment l'utiliser efficacement.

Inclure l'en-tête regex

Pour travailler avec des expressions régulières, incluez l'en-tête standard <regex></regex> :

 #include <refgex>

Vous aurez également généralement besoin <string> et <iostream> pour la saisie / sortie de l'entrée et de la chaîne.

Correspondance de modèle de base avec std :: regex_match

std::regex_match vérifie si la chaîne entière correspond au modèle donné.

 #include <iostream>
#include <string>
#include <refgex>

int main () {
    std :: string text = "Hello123";
    STD :: motif regex (r "([a-za-z] \ d)"); // lettres suivies de chiffres

    if (std :: regex_match (texte, modèle)) {
        stdiegel :: cout << "match complet trouvé! \ n";
    } autre {
        std :: cout << "pas de correspondance complète. \ n";
    }

    retour 0;
}

Remarque: R"(...)" est un littéral à cordes bruts, ce qui évite d'échapper à des réchauffes.

  • Utilisez std::regex_match lorsque vous voulez que la chaîne entière se conforme à un modèle (par exemple, validant un e-mail).
  • Il ne true que si la chaîne entière correspond.

std::regex_search trouve une correspondance n'importe où dans la chaîne.

 std :: string text = "Contactez-nous à support@example.com aujourd&#39;hui.";
std :: regex email_pattern (r "(\ b [a-za-z0-9 ._% -] @ [a-za-z0-9.-] \. [a-za-z] {2,} \ b)");

if (std :: regex_search (text, email_pattern)) {
    std :: cout << "e-mail trouvé dans le texte. \ n";
}

Ceci est utile pour la numérisation du texte pour extraire ou détecter des modèles comme les numéros de téléphone, les URL, etc.

Extraction de pièces assorties avec STD :: Smatch

Pour capturer et extraire les parties du match, utilisez std::smatch (pour std::string ) ou std::cmatch (pour les cordes C).

 std :: string text = "Date: 2023-10-05";
std :: regex date_pattern (r "((\ d {4}) - (\ d {2}) - (\ d {2}))");
Matchs STD :: Smatch;

if (std :: regex_search (texte, correspondant, date_pattern)) {
    std :: cout << "match complet:" << correspond [0] << "\ n"; // 2023-10-05
    std :: cout << "année:" << correspond [1] << "\ n"; // 2023
    std :: cout << "mois:" << correspond [2] << "\ n"; // 10
    std :: cout << "jour:" << correspond [3] << "\ n"; // 05
}
  • matches[0] sont le match complet.
  • matches[1] , matches[2] , etc., correspondent aux groupes capturés chez les parents.

Remplacer le texte par std :: regex_replace

Vous pouvez remplacer les correspondances à l'aide de std::regex_replace .

 std :: string text = "Appelez-moi au 123-456-7890 demain.";
std :: regex phone_pattern (r "(\ d {3} - \ d {3} - \ d {4})");
std :: string anonymized = std :: regex_replace (text, téléphone_pattern, "[téléphone]");

std :: cout << anonymisé << "\ n"; 
// Sortie: appelez-moi au [téléphone] demain.

Vous pouvez également utiliser des groupes capturés dans les remplacements:

 std :: string name = "Doe, John";
std :: regex name_pattern (r "((\ w), \ s * (\ w))");
std :: string formated = std :: regex_replace (name, name_pattern, "2 $ $ 1");
// Résultats: "John Doe"
  • $1 , $2 , etc., reportez-vous aux groupes capturés.

Drapeaux regex communs

Lors de la construction d'un regex, vous pouvez transmettre des drapeaux pour modifier le comportement:

 STD :: Regex Pattern ("Hello", std :: regex_constants :: iase); // Case-Insitive
std :: regex multi_line ("^ start", std :: regex_constants :: iase | std :: regex_constants :: multiline);

Facteurs communs:

  • std::regex_constants::icase - correspondance insensible à la casse
  • std::regex_constants::multiline - ^ et $ correspond à la ligne commence / se termine
  • std::regex_constants::optimize - hiérarchisez la vitesse sur le temps de construction

Conseils de performance

  • Les objets regex sont coûteux à construire. Réutilisez-les si vous êtes utilisé plusieurs fois.
  • Évitez de créer le même regex dans une boucle.
 std :: regex valid_email (r "(\ b [a-za-z0-9 ._% -] @ [a-za-z0-9.-] \. [a-za-z] {2,} \ b)"); // fais ça une fois

pour (const auto & e-mail: email_list) {
    if (std :: regex_match (email, valid_email)) {
        // traite un e-mail valide
    }
}

Résumé des fonctions clés

  • std::regex_match - la chaîne complète doit correspondre
  • std::regex_search - trouve le premier match n'importe où
  • std::regex_replace - remplace les matchs dans une chaîne
  • std::smatch - stocke plusieurs sous-matchs (avec des groupes de capture)

La bibliothèque C Regex prend en charge les fonctionnalités regex les plus courantes, bien qu'elle puisse varier légèrement selon le compilateur (en particulier les versions plus anciennes de GCC). Tenez-vous à des modèles de base pour la portabilité.

Fondamentalement, incluez <regex></regex> , définissez votre modèle, puis utilisez la correspondance, la recherche ou remplacez au besoin. Les groupes de capture et les chaînes de remplacement le rendent puissant pour l'analyse et la transformation de texte.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Porce de variable PHP expliquée
1 Il y a quelques mois By 百草
Conseils pour écrire des commentaires PHP
4 Il y a quelques semaines By 百草
Commentant le code en php
4 Il y a quelques semaines By 百草
<🎜>: Grow A Garden - Guide complet des marchands itinérants
3 Il y a quelques semaines By Jack chen

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Tutoriel PHP
1510
276
Qu'est-ce que succinct (prouver la pièce)? Comment fonctionner? Prouver l'économie des jetons et les prévisions de prix Qu'est-ce que succinct (prouver la pièce)? Comment fonctionner? Prouver l'économie des jetons et les prévisions de prix Aug 06, 2025 pm 06:42 PM

Répertoire Qu'est-ce qui est succinct (prouver) qui a créé succinct (prouver)? Quel capital-risque soutient succinct (prouver)? Comment succinct (prouv) fonctionne SP1ZKVM et Prover Network Technology Technology Cross-Chain Vérification Prouver des détenteurs de jetons de jeton Token Token Token Allocation Token Token Potentiels Token Prouver la prédiction de la communauté PROVET PROVE-TOKEN POUR POUR POUR LE TOKET PREMARKET Activités de négociation de trading Succ

Effacez-vous du vecteur tout en itérant Effacez-vous du vecteur tout en itérant Aug 05, 2025 am 09:16 AM

S'il itère lors de la suppression d'un élément, vous devez éviter d'utiliser un itérateur défaillant. ① La manière correcte consiste à l'utiliser = ve.erase (it) et à utiliser l'itérateur valide renvoyé par effacement pour continuer à traverser; ② L'idiome recommandé "effacer" pour la suppression par lots: Vec.erase (std :: retire_if (ve.begin (), ve.end (), condition), ve.end ()), qui est sûr et efficace; ③ Vous pouvez utiliser un itérateur inversé pour supprimer de l'arrière-plan à l'avant, la logique est claire, mais vous devez faire attention à la direction de l'état. Conclusion: Mettez toujours à jour l'itérateur avec la valeur de retour d'effacement, interdisant les opérations sur l'itérateur défaillant, sinon un comportement non défini en résultera.

Prévisions de prix succinct (prouvoir): 2025, 2026, 2027-2030 Prévisions de prix succinct (prouvoir): 2025, 2026, 2027-2030 Aug 11, 2025 am 10:12 AM

Répertoire Qu'est-ce qui est succinct (prouvait) quel capital-risque soutient succinct (prouver)? Comment succinct (proue) Principe de travail SP1ZKVM et Network Prover OpsucCinct TECHNOLY CROSS-CHANNE Vérification PROUVE Économie Token Détails de jetons 2025, 2026, 2027-2030 Succinct (prouvure) Prévisions de prix Succinct (PROVE) PRIVANCE SUCHINCCING (PROVE) PRÉCISSION PRIX: Extension du volume de négociation et listing Momentum 2025-20

C Exemple de mot-clé automatique C Exemple de mot-clé automatique Aug 05, 2025 am 08:58 AM

Theautokeywordinc décecestypeypeofaVariableFromitsInitializer, faisant du codécleanerandMoremainableable.1.itreduceSverbosity, en particulier avec des ennuifs de type.

C Exemple de répartition des balises C Exemple de répartition des balises Aug 05, 2025 am 05:30 AM

TagDispatching utilise des balises de type pour sélectionner la surcharge de fonction optimale pendant la période de compilation pour obtenir un polymorphisme efficace. 1. Utilisez Std :: Iterator_Traits pour obtenir la balise de catégorie Iterator; 2. Définissez plusieurs fonctions de surcharge DO_ADVANCE et traitez Random_Access_Iterator_Tag, Bidrectional_iterator_tag et Input_Iterator_Tag respectivement; 3. La fonction principale My_Advance appelle la version correspondante en fonction du type de balise dérivé pour s'assurer qu'il n'y a pas de surcharge d'exécution pendant la décision de la période de compilation; 4. Cette technologie est adoptée par des bibliothèques standard telles que STD :: Advance et prend en charge la personnalisation prolongée.

Comment obtenir la taille d'un fichier en c Comment obtenir la taille d'un fichier en c Aug 11, 2025 pm 12:34 PM

Utilisez les méthodes SeekG et Tellg de STD :: IFStream pour obtenir la taille du fichier sur les plates-formes. En ouvrant un fichier binaire et en le positionnant jusqu'au bout, utilisez Tellg () pour renvoyer le nombre d'octets; 2. Il est recommandé d'utiliser STD :: FileSystem :: File_Size pour C 17 et supérieur. Le code est concis et les erreurs sont gérées par le biais d'exceptions. La norme C 17 doit être activée; 3. Sur les systèmes POSIX, la fonction STAT () peut être utilisée pour obtenir efficacement la taille du fichier, ce qui convient aux scénarios sensibles aux performances. La méthode appropriée doit être sélectionnée en fonction du compilateur et de la plate-forme, et STD :: Système de fichiers doit être utilisé en premier (si disponible), autrement utiliser IFStream pour assurer la compatibilité ou utiliser ST sur les systèmes UNIX

C Exemple de liste liée C Exemple de liste liée Aug 05, 2025 am 06:23 AM

Cet exemple C à liaison unique implémente les opérations d'insertion, de traversée et de suppression. 1. Utilisez l'insertatbeginning pour insérer les nœuds dans la tête; 2. Utilisez l'insertatend pour insérer les nœuds dans la queue; 3. Utilisez Deletenode pour supprimer les nœuds par valeur et renvoyez les résultats booléens; 4. Utilisez la méthode d'affichage pour traverser et imprimer la liste liée; 5. Libérez toute la mémoire du nœud dans le destructeur pour éviter les fuites; La sortie finale du programme vérifie l'exactitude de ces opérations, démontrant pleinement la méthode de gestion de base des structures de données dynamiques.

Que dois-je faire si l'application ne peut pas démarrer normalement (0xc0000906)? Voir la solution ici Que dois-je faire si l'application ne peut pas démarrer normalement (0xc0000906)? Voir la solution ici Aug 13, 2025 pm 06:42 PM

Lors de l'ouverture du logiciel ou du jeu, une invite apparaît soudainement que "l'application ne peut pas démarrer normalement (0xc0000906)" apparaît, et de nombreux utilisateurs seront confus et ne savent pas par où commencer. En fait, la plupart de ces erreurs sont causées par la corruption de fichiers système ou les bibliothèques d'exécution manquantes. Ne vous précipitez pas pour réinstaller le système. Cet article vous fournit plusieurs solutions simples et efficaces pour vous aider à restaurer rapidement le programme à exécuter. 1. Quelle est l'erreur de 0xc0000906? Le code d'erreur 0xc0000906 est une exception de démarrage courante dans les systèmes Windows, ce qui signifie généralement que le programme ne peut pas charger les composants système nécessaires ou l'exécution de l'environnement lors de l'exécution. Ce problème se produit souvent lors de l'exécution de grands logiciels ou de jeux. Les principales raisons peuvent inclure: la bibliothèque d'exécution nécessaire n'est pas installée ou endommagée. Le package d'installation du logiciel est infini

See all articles