| . (point) | représente un caractère qcq, sauf \n (comportement par défaut, modifiable) |
| * | marque la possible répétition du caractère précédent (ou de l'expression précédente entre parenthèses |
| + | l'expression régulière est présente au MOINS une fois |
| ? | l'expression régulière est présente au PLUS une fois |
| [...] | recherche L'UN des caractères de l'ensemble des caractères entre crochets. |
| [^..] | recherche dans le complémentaire de l'ensemble des caractères qui suivent entre les crochets |
| ^ | la recherche s'effectue en début de ligne |
| $ | la recherche s'effectue en fin de ligne |
| \ | annule le rôle de méta-caractère du caractère qui suit, et lui permet d'avoir sa signification usuelle |
| | | joue le rôle de "ou" entre 2 exp.rég. |
| (...) | rôle de groupemrnt et de mémorisation de la regex comprise |
| {n,m} | le nombre de répétitions attendu va de n à m (et porte sur le caractère ou l'expression précédent), m et n inférieurs à 65536 |
| {n} | le nombre de répétitions attendu doit être exactement n |
| {n,} | le nombre de répétitions attendu est au moins n |
| {,m} | le nombre de répétitions attendu est au plus m |
| {0,} {1,} {0,1} équivalent respectivement à * + ? |
| . (point) | représente un caractère qcq (y compris un métacaractère protégé) sauf \n (comportement par défaut, modifiable) |
| [...] | recherche L'UN (exclusivement) des caractères de l'ensemble des caractères entre crochets. |
| [^..] | recherche dans le complémentaire de l'ensemble des caractères qui suivent entre les crochets |
| [a-z] | l'un des caractères de la liste (noter le tiret et pas ..) |
| \ij \xhk | caractère de code octal 0ij, ou de code hexa x0hk |
| \a \b \f \n \r \t | caractères spéciaux : bip, retour arrière, saut de page, saut de ligne, retour-chariot, tabulation |
| Construction | Classe équivalente | Construction de négation | Classe équivalente |
|---|---|---|---|
| \d (un chiffre) | [0-9] | \D (tout caractère non chiffre) | [^0-9] |
| \w (un caractère alphanumérique, avec le souligné) | [a-zA-Z0-9_] | \W (complémentaire de \w) | [^a-zA-Z0-9_] |
| \s (espace ou séparateurs) | [ \r \n \f \t] | \S (pas un caractèrs d'espace) | [^ \r \n \f \t] |
| motif | quelles chaines reconnues ? |
|---|---|
| /5[0-9]/ | |
| /5[0-9]{2}/ | |
| /(5[0-9]){2}/ | |
| /(5[0-9]){0,2}/ | |
| /(5[0-9])+/ | |
| titi, tit?, t&t4 ..(t aux 1ère et 3ème place d'un mot de 4 lettres) | |
| tous les mots formés exactement de 4 caractères alphanumériques | |
| tous les mots formés comme tati avec un t suivi d'une voyelle | |
| /[\da-fA-F]{2}/ |
| * | marque la répétition possible de 0 à N (N indéfinie) |
| + | l'expression précédente est présente au MOINS une fois (1 ou plus) |
| ? | l'expression précédente est présente au PLUS une fois (donc 0 ou 1), exprime une présence facultative |
| {n,m} | le nombre de répétitions attendu va de n à m |
| {n} | le nombre de répétitions attendu doit être exactement n |
| {n,} | le nombre de répétitions attendu est au moins n |
| {,m} | le nombre de répétitions attendu est au plus m |
| | | joue le rôle de "ou" entre 2 expr rég |
| ^regex | la recherche du motif regex doit être effectuée uniquement en début de chaine |
| regex$ | recherche du motif doit être effectuée uniquement en fin de chaine |
| \bregex regex\b | recherche du motif effectuée uniquement en début ou en fin d'un mot de la chaine |
#!/usr/bin/perl -w $date ="2002-12-16"; $date =~ s/.. /.. /; print "$date\n"; # doit afficher 16/12/2002Maintenant étudier le format de date retournée par la commande système date
| g | la recherche est globale, de toutes les occurences |
| i | recherche insensible à la casse |
| s | traiter la chaîne comme une ligne simple (le caractère . reconnait aussi les sauts de ligne) |
| m | traiter la chaîne comme des lignes multiples (^ et $ s'appliqueront à chaque ligne) |
| o | ne compiler l'expression qu'une seule fois |
| x | utiliser les expressions régulières étendues |
############################### ## modificateurs.pl ## étude des modificateurs ## sur une chaine multiligne ############################### $texte="Si l'info est notre métier,\nnous devons tous nous tenir formés et informés. Mais méfions-nous des formateurs en \"info\" qui désinforment ! Aimez-vous la science Informatique ou l'info scientifique ? Voici ma dernière question informelle sur l'informatique : Etes-vous formateur(e), formaté(e) ou les 2 à la fois ? "; print "$texte\n\n"; print "regex = "; $ch = <>; chomp($ch); print "Résultats obtenus :\n"; print "($1) --> trouvé avec \/$ch\/\n" if $texte =~ /($ch)/ ; print "($1) --> trouvé avec \/$ch\/i\n" if $texte =~ /($ch)/i ; print "($1) --> trouvé avec \/$ch\/g\n" if $texte =~ /($ch)/g ; print "($1) --> trouvé avec \/$ch\/m\n" if $texte =~ /($ch)/m ; print "($1) --> trouvé avec \/$ch\/s\n" if $texte =~ /($ch)/s ; ------------------------------------Tester avec des exemples variés dont les suivants. Commentez les résultats