Outils d'utilisateurs

Outils du Site


expressions_regulieres

Différences

Cette page vous donne les différences entre la révision choisie et la version actuelle de la page.

Lien vers cette vue

expressions_regulieres [2015/02/14 17:17]
woly
expressions_regulieres [2016/07/05 18:54] (Version actuelle)
gbdivers
Ligne 1: Ligne 1:
  
-^ Chapitre précédent ^ [[programmez_avec_le_langage_c|Sommaire principal]] ^ Chapitre suivant ^+[[string_etendu|Chapitre précédent]] ^ [[programmez_avec_le_langage_c|Sommaire principal]] ^ [[expressions_regulieres_2|Chapitre suivant]] ^
  
-====== Les expressions régulières 1 ======+====== [Aller plus loin] Les expressions régulières 1 ======
  
 Lorsque nous lisons un texte, nous sommes capable de reconnaître la signification (ou sémantique) de certains motifs dans le texte. Par exemple, si on écrit ''"25/12/2014"'', beaucoup de personnes reconnaîtront une date, correspondant au 25 décembre 2014. Si on écrit ''"18:30"'', on reconnaît une heure : dix-huit heure trente. Ou encore, on reconnait que ''"http://www.google.fr"'' est une URL internet. Lorsque nous lisons un texte, nous sommes capable de reconnaître la signification (ou sémantique) de certains motifs dans le texte. Par exemple, si on écrit ''"25/12/2014"'', beaucoup de personnes reconnaîtront une date, correspondant au 25 décembre 2014. Si on écrit ''"18:30"'', on reconnaît une heure : dix-huit heure trente. Ou encore, on reconnait que ''"http://www.google.fr"'' est une URL internet.
  
-Nous sommes capable de trouver la sémantique d'un chaîne parce que l'on connaît le motif qui caractérise cette chaîne. On a l'habitude d'écrire les dates en indiquant le jour, le mois et l'année (en français). On a l'habitude aussi de voir des URL écrites sous la forme ''"http:/ /"'' suivi de plusieurs mots séparés par des points ou des barres obliques.+Nous sommes capable de trouver la sémantique d'une chaîne parce que l'on connaît le motif qui caractérise cette chaîne. On a l'habitude d'écrire les dates en indiquant le jour, le mois et l'année (en français). On a l'habitude aussi de voir des URL écrites sous la forme ''"http:/ /"'' suivi de plusieurs mots séparés par des points ou des barres obliques.
  
 Les expressions régulières sont un moyen efficace d'écrire de tels motifs. Avec ces motifs, il sera ensuite possible de vérifier qu'une chaîne respecte ce motif ou encore d'identifier les sous-chaînes qui respectent ce motif. Les expressions régulières sont un moyen efficace d'écrire de tels motifs. Avec ces motifs, il sera ensuite possible de vérifier qu'une chaîne respecte ce motif ou encore d'identifier les sous-chaînes qui respectent ce motif.
Ligne 39: Ligne 39:
 Plus concrètement, si l'on prend la chaîne suivante : "La date du 25/12/2014 est un jeudi" et que l'on demande d'écrire une expression régulière pour trouver la date dans cette chaîne, alors la chaîne "La date du 25/15/2014 est un jeudi" est la séquence cible et la correspondance est "25/12/2014". Le motif est une chaîne qui signifie "trouver une date au format jour/mois/année". Bien sûr, il n'est pas possible d'écrire un motif de cette façon, il faut utiliser une syntaxe spécifique, qui sera décrite dans la suite de ce chapitre. Plus concrètement, si l'on prend la chaîne suivante : "La date du 25/12/2014 est un jeudi" et que l'on demande d'écrire une expression régulière pour trouver la date dans cette chaîne, alors la chaîne "La date du 25/15/2014 est un jeudi" est la séquence cible et la correspondance est "25/12/2014". Le motif est une chaîne qui signifie "trouver une date au format jour/mois/année". Bien sûr, il n'est pas possible d'écrire un motif de cette façon, il faut utiliser une syntaxe spécifique, qui sera décrite dans la suite de ce chapitre.
  
-Avec une expression régulière, on va donc pouvoir réaliser principalement trois opérations, chaque opération correspondant à une fonction. Ces différentes fonctions seront détaillées par dans les prochains chapitres, la suite de ce chapitre sera consacrée à la syntaxe utilisable pour écrire un motif. Mais pour vous permettre de pratiquer et apprendre correctement les expressions régulières, nous allons voir rapidement une syntaxe possible de ces fonctions (il est possible d'utiliser ces fonctions de différentes façons, nous n'en verrons qu'une seule pour le moment).+Avec une expression régulière, on va donc pouvoir réaliser principalement trois opérations, chaque opération correspondant à une fonction. Ces différentes fonctions seront détaillées dans les prochains chapitres, la suite de ce chapitre sera consacrée à la syntaxe utilisable pour écrire un motif. Mais pour vous permettre de pratiquer et apprendre correctement les expressions régulières, nous allons voir rapidement une syntaxe possible de ces fonctions (il est possible d'utiliser ces fonctions de différentes façons, nous n'en verrons qu'une seule pour le moment).
  
 La première fonctionnalité des expressions régulières est la **validation** d'une chaîne, c'est-à-dire vérifier qu'une chaîne respecte un motif. La fonction correspondante est la fonction ''regex_match''. Une version simple de cette fonction prend en arguments la séquence cible et l'expression régulière et retourne une valeur booléenne (vrai si la séquence cible correspond au motif, faux sinon). La première fonctionnalité des expressions régulières est la **validation** d'une chaîne, c'est-à-dire vérifier qu'une chaîne respecte un motif. La fonction correspondante est la fonction ''regex_match''. Une version simple de cette fonction prend en arguments la séquence cible et l'expression régulière et retourne une valeur booléenne (vrai si la séquence cible correspond au motif, faux sinon).
Ligne 56: Ligne 56:
          
     target = "abc";     target = "abc";
-    result = std::regex_match("abc", pattern);+    result = std::regex_match(target, pattern);
     std::cout << std::boolalpha << result << std::endl;     std::cout << std::boolalpha << result << std::endl;
 } }
Ligne 85: Ligne 85:
          
     target = "abc";     target = "abc";
-    result = std::regex_search("abc", pattern);+    result = std::regex_search(target, pattern);
     std::cout << std::boolalpha << result << std::endl;     std::cout << std::boolalpha << result << std::endl;
 } }
Ligne 189: Ligne 189:
 </code> </code>
  
-Ainsi, le motif "a" ne peut correspondre sur si la séquence cible correspond exactement à "a", les chaînes "", "b" et "ab" ne correspondent pas.+Ainsi, le motif "a" ne peut correspondre que si la séquence cible correspond exactement à "a", les chaînes "", "b" et "ab" ne correspondent pas.
  
 Attention de bien faire attention à la fonction que l'on utilise. Si on réalise une recherche de sous-chaînes (avec ''regex_search'') au lieu d'une validation de chaîne (avec ''regex_match''), le résultat obtenu n'est pas identique. Attention de bien faire attention à la fonction que l'on utilise. Si on réalise une recherche de sous-chaînes (avec ''regex_search'') au lieu d'une validation de chaîne (avec ''regex_match''), le résultat obtenu n'est pas identique.
Ligne 257: Ligne 257:
 Pour écrire le caractère ''\'', il faut donc écrire ''\\'' en C++, ce qui fait que le motif ''"\."'' devient ''"\\."'' en C++. Cette chaîne doit être lue de la façon suivante : le premier ''"\"'' correspond au caractère d'échappement, donc ''"\\"'' correspond au caractère ''"\"'' dans le motif, et donc le motif ''"\."'' permet de rechercher un point. Pour écrire le caractère ''\'', il faut donc écrire ''\\'' en C++, ce qui fait que le motif ''"\."'' devient ''"\\."'' en C++. Cette chaîne doit être lue de la façon suivante : le premier ''"\"'' correspond au caractère d'échappement, donc ''"\\"'' correspond au caractère ''"\"'' dans le motif, et donc le motif ''"\."'' permet de rechercher un point.
  
-Une autre solution en C++, pour éviter de devoir utiliser les caractères d'échappement, est d'utiliser les littérales chaînes brutes (//raw string//). Dans ce cas, les caractères spéciaux du C++ (''\'' ou ''"'' par exemple) sont interprété comme des caractères normaux. Pour écrire une littérale chaîne brute, il faut remplacer ''"..."'' par ''R"(...)''"+Une autre solution en C++, pour éviter de devoir utiliser les caractères d'échappement, est d'utiliser les littérales chaînes brutes (//raw string//). Dans ce cas, les caractères spéciaux du C++ (''\'' ou ''"'' par exemple) sont interprété comme des caractères normaux. Pour écrire une littérale chaîne brute, il faut remplacer ''"..."'' par ''R"(...)"''.
  
 Ainsi, au lieu d'écrire ''"\\."'', il est possible d'écrire ''R"(\.)"''. le code devient alors : Ainsi, au lieu d'écrire ''"\\."'', il est possible d'écrire ''R"(\.)"''. le code devient alors :
Ligne 305: Ligne 305:
  
  
-^ Chapitre précédent ^ [[programmez_avec_le_langage_c|Sommaire principal]] ^ Chapitre suivant ^ +[[string_etendu|Chapitre précédent]] ^ [[programmez_avec_le_langage_c|Sommaire principal]] ^ [[expressions_regulieres_2|Chapitre suivant]] 
-{{tag> Cours C++}}+
expressions_regulieres.1423930620.txt.gz · Dernière modification: 2015/02/14 17:17 par woly