Outils pour utilisateurs

Outils du site


perl:expressions_regulieres

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
Dernière révisionLes deux révisions suivantes
perl:expressions_regulieres [2009/03/15 01:02] – édition externe 127.0.0.1perl:expressions_regulieres [2009/03/15 01:11] root
Ligne 1: Ligne 1:
 ====== 1. Généralités ====== ====== 1. Généralités ======
  
-Les expressions régulières représentent un langage à elles toute seule, embarqué dans des outils comme Java ou Perl, il s'agit d'un langage dans le langage ! Elles ont été conçues comme une généralisation du fameux "joker" (par exemple en SQL: //LIKE 'a_virgin%**), afin de répondre à divers problèmes sur l'anlayse et le traitement des données textuelles:+Les expressions régulières représentent un langage à elles toute seule, embarqué dans des outils comme Java ou Perl, il s'agit d'un langage dans le langage ! Elles ont été conçues comme une généralisation du fameux "joker" (par exemple en SQL: //LIKE 'a_virgin%//), afin de répondre à divers problèmes sur l'anlayse et le traitement des données textuelles: 
   * trouver et compter des occurences de texte particulières   * trouver et compter des occurences de texte particulières
   * reconnaître ou valider une forme de texte particulière   * reconnaître ou valider une forme de texte particulière
Ligne 18: Ligne 19:
  
 En perl, une expression régulière est en général délimitée par le caractère **/**. L'opérateur qui permet d'évaluer une expression régulière sur une chaîne de caractère est **=~**. Par exemple : En perl, une expression régulière est en général délimitée par le caractère **/**. L'opérateur qui permet d'évaluer une expression régulière sur une chaîne de caractère est **=~**. Par exemple :
 +
   my $text = "Le chameau dans le desert";   my $text = "Le chameau dans le desert";
   print "Chameau en vue" if $text =~ /chameau/;   print "Chameau en vue" if $text =~ /chameau/;
  
 Cependant si l'on spécifie explicitement le préfixe **m** (//matching//, implicite par défaut), on est alors libre de changer le délimiteur, ce qui peut être très pratique pour l'échappement : Cependant si l'on spécifie explicitement le préfixe **m** (//matching//, implicite par défaut), on est alors libre de changer le délimiteur, ce qui peut être très pratique pour l'échappement :
 +
   my $path = "/usr/bin/test";   my $path = "/usr/bin/test";
   print "un programme" if $path =~ m:/usr/bin/test:;   print "un programme" if $path =~ m:/usr/bin/test:;
  
 Par défaut, le résultat d'une opération de //matching// renvoie une valeur booléenne. Si on est à la recherche de plusieurs occurences et que l'on veut les compter, on utilise d'une part le suffixe **g**, et d'autre part on peut forcer l'évaluation en mode liste: Perl renvoie alors la liste des éléments de la chaîne qui //matchent// : Par défaut, le résultat d'une opération de //matching// renvoie une valeur booléenne. Si on est à la recherche de plusieurs occurences et que l'on veut les compter, on utilise d'une part le suffixe **g**, et d'autre part on peut forcer l'évaluation en mode liste: Perl renvoie alors la liste des éléments de la chaîne qui //matchent// :
 +
   my $text = "un chasseur sachant chasser";   my $text = "un chasseur sachant chasser";
   my @cha = $text =~ /cha/g;   my @cha = $text =~ /cha/g;
Ligne 31: Ligne 35:
  
 Enfin il est possible d'inverser le test : Enfin il est possible d'inverser le test :
 +
   my $text = "Le chameau dans le desert";   my $text = "Le chameau dans le desert";
   print "Pas de chameau à l'horizon" if $text !~ /chameau/;   print "Pas de chameau à l'horizon" if $text !~ /chameau/;
Ligne 37: Ligne 42:
  
 L'écriture est très similaire, mais cette fois l'opération consiste à éventuellement modifier la chaîne traitée : L'écriture est très similaire, mais cette fois l'opération consiste à éventuellement modifier la chaîne traitée :
 +
   my $text = "un chasseur sachant chasser";   my $text = "un chasseur sachant chasser";
   $text =~ s/cha/cho/; # text devient 'un chosseur sachant chasser'   $text =~ s/cha/cho/; # text devient 'un chosseur sachant chasser'
Ligne 44: Ligne 50:
  
 Le résultat de l'opération est toujours le nombre de substitutions, quel que soit le contexte (liste ou scalaire) : Le résultat de l'opération est toujours le nombre de substitutions, quel que soit le contexte (liste ou scalaire) :
 +
   my $text = "un chasseur sachant chasser";   my $text = "un chasseur sachant chasser";
   print ($text =~ s/cha/cho/g)." substitutions effectuéees";   print ($text =~ s/cha/cho/g)." substitutions effectuéees";
Ligne 50: Ligne 57:
  
 Hormis le contexte liste du mode //matching//, il existe un moyen général pour récupérer des motifs reconnus par une expression régulière, il suffit d'utiliser les parenthèses : Hormis le contexte liste du mode //matching//, il existe un moyen général pour récupérer des motifs reconnus par une expression régulière, il suffit d'utiliser les parenthèses :
 +
   my @a = "Perl c'est bien" =~ /(.*) c'est (.*)/; # @a = ("Perl", "bien")   my @a = "Perl c'est bien" =~ /(.*) c'est (.*)/; # @a = ("Perl", "bien")
   # $1 = "Perl"   # $1 = "Perl"
Ligne 101: Ligne 109:
 ^ [A-Z] ^ Recherche n'importe quel caractère entre A et Z^ ^ [A-Z] ^ Recherche n'importe quel caractère entre A et Z^
 | [A-Za-z] | Recherche n'importe quel caractère entre A et Z ou a et z| | [A-Za-z] | Recherche n'importe quel caractère entre A et Z ou a et z|
-| [!^0-9] | Recherche n'importe quel caractère qui n'est pas entre 0 et 9|+| [!%%^%%0-9] | Recherche n'importe quel caractère qui n'est pas entre 0 et 9|
  
 Exemples: Exemples:
Ligne 117: Ligne 125:
 On peut également vérifier que le motif recherché est positionné à un endroit précis dans la chaîne de caractère, plus précisément au début où à la fin : On peut également vérifier que le motif recherché est positionné à un endroit précis dans la chaîne de caractère, plus précisément au début où à la fin :
  
-^ /^From (.*)/ ^ Récupère dans $1 ce qui suit le "From " seulement si la ligne commence par "From "^ +%%/^From (.*)/%% ^ Récupère dans $1 ce qui suit le "From " seulement si la ligne commence par "From "^ 
-| s/!+$/./ | Remplace une série de "!" en fin de ligne par un point| +%%s/!+$/./%% | Remplace une série de "!" en fin de ligne par un point| 
-| /^$/ | Recherche les lignes vides|+%%/^$/%% | Recherche les lignes vides|
  
  
 //A suivre...// //A suivre...//
  
perl/expressions_regulieres.txt · Dernière modification : 2013/03/13 11:09 de root