c regex tutorial regular expressions c with examples
Le didacticiel sur les expressions régulières C ++ ou Regex explique le fonctionnement de l'expression régulière en C ++, y compris la fonctionnalité de correspondance, de recherche, de remplacement, de validation d'entrée et de création de jetons:
Les expressions régulières ou les expressions régulières ou les expressions régulières comme elles sont communément appelées sont utilisées pour représenter un modèle particulier de chaîne ou de texte. Les expressions régulières sont souvent utilisées pour désigner une syntaxe textuelle standard d'une chaîne.
=> Visitez ici pour voir la série de formations C ++ pour tous.
Chaque caractère d'une expression régulière a soit un caractère avec une signification littérale, soit un «métacaractère» qui a une signification particulière.
Par exemple , une expression régulière «a [a-z]» peut avoir les valeurs «aa», «ab», «ax» etc. Ici, a a une signification littérale et [a-z] désigne tout caractère minuscule de a à z.
Bien entendu, l'exemple ci-dessus est le plus simple. Nous pouvons avoir une expression régulière avec des modèles plus complexes à faire correspondre.
Presque tous les langages de programmation prennent en charge les expressions régulières. C ++ prend directement en charge les expressions régulières à partir de C ++ 11. Outre les langages de programmation, la plupart des programmes de traitement de texte comme les lexers, les éditeurs de texte avancés, etc. utilisent des expressions régulières.
Dans ce tutoriel, nous explorerons les détails des expressions rationnelles en général ainsi que par rapport à la programmation C ++.
Ce que vous apprendrez:
- Expression régulière (regex) en C ++
- Modèles de fonction utilisés dans les expressions régulières C ++
- Validation d'entrée C ++
- Conclusion
Expression régulière (regex) en C ++
Une expression régulière ou regex est une expression contenant une séquence de caractères qui définissent un modèle de recherche particulier qui peut être utilisé dans des algorithmes de recherche de chaîne, des algorithmes de recherche ou de recherche / remplacement, etc. Les expressions régulières sont également utilisées pour la validation d'entrée.
La plupart des langages de programmation fournissent des capacités intégrées pour les expressions régulières ou via des bibliothèques. À partir de C ++ 11, C ++ fournit un support regex au moyen de la bibliothèque standard via l'en-tête.
Un processeur d'expression régulière utilisé pour analyser une expression régulière la traduit en une représentation interne qui est exécutée et mise en correspondance avec une chaîne représentant le texte recherché. C ++ 11 utilise la grammaire ECMAScript comme grammaire par défaut pour les regex. ECMAScript est simple, mais il offre de puissantes capacités de regex.
Voyons quelques-uns des modèles que nous spécifions dans les expressions régulières comme la spécification de plage, les modèles répétés, etc.
Spécifications de la gamme
La spécification d'une plage de caractères ou de littéraux est l'un des critères les plus simples utilisés dans une expression régulière.
Par exemple, nous pouvons spécifier une plage de lettres minuscules de a à z comme suit:
[a-z]
Cela correspondra exactement à un caractère minuscule.
Les critères suivants,
[A-Za-z0-9]
L'expression ci-dessus spécifie la plage contenant un seul caractère majuscule, un caractère minuscule et un chiffre de 0 à 9.
Les crochets ([]) dans les expressions ci-dessus ont une signification particulière, c'est-à-dire qu'ils sont utilisés pour spécifier la plage. Si vous souhaitez inclure un crochet dans le cadre d'une expression, vous devrez l'échapper.
Donc l'expression suivante,
[ [0-9]
L'expression ci-dessus indique un crochet ouvrant et un chiffre compris entre 0 et 9 comme expression régulière.
Mais notez que comme nous programmons en C ++, nous devons utiliser la séquence d'échappement spécifique au C ++ comme suit:
[\ [0-9]
Motif répété
Les exemples de plage que nous avons spécifiés ci-dessus ne correspondent qu'à un seul caractère ou littéral. Si nous voulons faire correspondre plus d'un caractère, nous spécifions généralement le «modificateur d'expression» avec le modèle, ce qui en fait un modèle répété.
Un modificateur d'expression peut être «+» qui suggère de faire correspondre l'occurrence d'un motif une ou plusieurs fois ou il peut être «*» qui suggère de faire correspondre l'occurrence d'un motif à zéro ou plusieurs fois.
Par exemple,l'expression suivante,
[a-z] + correspond aux chaînes telles que a, aaa, abcd, softwaretestinghelp, etc. Notez qu'elle ne correspondra jamais à une chaîne vide.
L'expression,
[a-z] * correspondra à une chaîne vide ou à l'une des chaînes ci-dessus.
Si vous souhaitez spécifier un groupe de caractères à faire correspondre une ou plusieurs fois, vous pouvez utiliser les parenthèses comme suit:
(Xyz) +
L'expression ci-dessus correspondra à Xyz, XyzXyz et XyzXyzXyz, etc.
Exemple de regex C ++
Considérez une expression régulière qui correspond à un nom de fichier MS-DOS comme indiqué ci-dessous.
char regex_filename[] = “[a-zA-Z_] [a-zA-Z_0-9]*\.[a-zA-Z0-9]+”;
L'expression régulière ci-dessus peut être interprétée comme suit:
Faites correspondre une lettre (minuscule puis majuscule) ou un trait de soulignement. Faites ensuite correspondre zéro ou plusieurs caractères, chacun pouvant être une lettre, un trait de soulignement ou un chiffre. Puis correspond à un point littéral (.). Après le point, faites correspondre un ou plusieurs caractères, chacun pouvant être une lettre ou un chiffre indiquant l'extension de fichier.
Modèles de fonction utilisés dans les expressions régulières C ++
Voyons maintenant quelques-uns des modèles de fonctions importants lors de la programmation de regex en C ++.
regex_match ()
Ce modèle de fonction est utilisé pour correspondre au modèle donné. Cette fonction renvoie true si l'expression donnée correspond à la chaîne. Sinon, la fonction retourne false.
Voici un exemple de programmation C ++ qui illustre la fonction regex_match.
#include #include #include using namespace std; int main () { if (regex_match ('softwareTesting', regex('(soft)(.*)') )) cout Production:
Dans le programme ci-dessus, nous comparons d'abord la chaîne «softwareTesting» à l'expression régulière «(« (soft) (. *) »À l'aide de la fonction regex_match. Par la suite, nous démontrons également différentes variantes de regex_match en lui passant un objet string, gamme, etc.
regex_search ()
La fonction regex_search () est utilisée pour rechercher un modèle dans la chaîne qui correspond à l'expression régulière.
Considérez le programme C ++ suivant qui montre l'utilisation de regex_search ().
#include #include #include using namespace std; int main() { //string to be searched string mystr = 'She sells_sea shells in the sea shore'; // regex expression for pattern to be searched regex regexp('s[a-z_]+'); // flag type for determining the matching behavior (in this case on string objects) smatch m; // regex_search that searches pattern regexp in the string mystr regex_search(mystr, m, regexp); cout<<'String that matches the pattern:'< Production:
Nous spécifions une chaîne puis une expression régulière à l'aide de l'objet regex. Cette chaîne et l'expression régulière sont transmises à la fonction regex_search avec le type d'indicateur smatch. La fonction recherche la première occurrence du motif dans la chaîne d'entrée et renvoie la chaîne correspondante.
regex_replace ()
La fonction regex_replace () est utilisée pour remplacer le modèle correspondant à une expression régulière par une chaîne.
Utilisons un programme C ++ pour illustrer la fonction regex_replace ().
#include #include #include #include using namespace std; int main() { string mystr = 'This is software testing Help portal
'; cout<<'Input string: '< Production:
Ici, nous avons une chaîne d'entrée. Nous fournissons une expression régulière pour correspondre à une chaîne commençant par «p». Ensuite, nous remplaçons le mot correspondant par le mot «site Web». Ensuite, nous remplaçons le mot «site Web» par le portail.
Validation d'entrée C ++
Nous avons discuté des principaux modèles de fonctions utilisés pour la correspondance de modèles à l'aide de regex. Il est à noter que le but principal des regex est la validation des entrées. Vous pouvez valider l'entrée entrée à partir d'un périphérique d'entrée standard à l'aide de l'expression regex.
Consultez le programme ci-dessous pour montrer comment vous pouvez utiliser l'expression régulière pour valider les données entrantes.
#include #include #include using namespace std; int main() { string input; regex integer_expr('(\+|-)?[[:digit:]]+'); //As long as the input is correct ask for another number while(true) { cout<>input; if(!cin) break; //Exit when the user inputs q if(input=='q') break; if(regex_match(input,integer_expr)) cout<<'Input is an integer'< Production:
Ce programme correspond à l'entrée saisie par l'utilisateur pour valider s'il s'agit d'un entier. La sortie ci-dessus montre que lorsqu'un entier est entré, il donne un message approprié et lorsque toute autre donnée est entrée, il donne le message comme entrée non valide.
qu'est-ce qu'un code de clé de sécurité
Conclusion
Regex est utilisé dans les moteurs de recherche pour rechercher des modèles, rechercher et remplacer les boîtes de dialogue d'applications telles que les traitements de texte et les éditeurs de texte. Regex est également utilisé dans les utilitaires UNIX comme sed, awk ainsi que l'analyse lexicale du programme.
Nous avons vu les fonctions utilisées pour faire correspondre, rechercher et remplacer des modèles dans ce tutoriel. En utilisant ces fonctions, nous pouvons essentiellement développer une application efficace qui implémente la fonctionnalité souhaitée à l'aide de regex.
Regex permet de valider efficacement l'entrée ou de rechercher et de remplacer une chaîne par un motif de patch et cela peut être fait en utilisant très peu de lignes de code C ++.
Lire aussi => Didacticiel sur l'expression régulière Java
=> Consultez TOUS les didacticiels C ++ ici.
lecture recommandée
- Expression régulière MongoDB $ regex avec exemple
- Tutoriel Python DateTime avec des exemples
- Comment utiliser les expressions régulières Unix
- Tutoriel Java Array Length avec des exemples de code
- Tutoriel de script Unix Shell avec exemples
- Tutoriel de partage MongoDB avec exemple
- Tutoriel de recherche d'élément par texte Selenium avec des exemples
- Tutoriel Unix Pipes: Pipes dans la programmation Unix