Comment utiliser des expressions régulières en c
Pour utiliser des expressions régulières en C, vous devez inclure le fichier d'en-tête
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.
Correspondance partielle avec std :: regex_search
std::regex_search
trouve une correspondance n'importe où dans la chaîne.
std :: string text = "Contactez-nous à support@example.com aujourd'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!

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

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

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

Clothoff.io
Dissolvant de vêtements AI

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

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

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

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.

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

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

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.

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

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.

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
