L'expression rationnelle est un modèle à comparer avec une chaîne de caractères (pattern matching). Utile pour la recherche, la modification et l'extraction.
Syntaxe d'une expression rationnelle : /expression/
=~
recherche d'une correspondance de l'expression à droite sur le paramètre de gauche ;
!~
négation de =~
. | tout caractère (sauf le \n ) |
[...] | chercher un des caractères entre crochets |
[^...] | tout caractère qui n'est pas dans les crochets |
\n \r \f \t | nouvelle ligne, retour chariot, saut de page, tabulation |
\w | caractères alphanumériques (A..Z, a..z, 0..9) |
\W | tout sauf des caractères alphanumériques |
\s | espace |
\S | pas d'espace |
\A | début de la chaine |
\Z | fin de la chaine |
\d | chiffre (0..9) |
\D | tout sauf un chiffre (0..9) |
^e | la ligne (ou la chaine) commence par le caractère e |
e$ | la ligne (ou la chaine) finit par le caractère e |
e+ | une ou plusieurs occurrences de e |
e* | zéro ou plusieurs occurrences de e |
e? | zéro ou une occurrence de e |
e{n} | n instances de e |
e{n,} | au moins n occurrences de e |
e{n,p} | au moins n occurrences de e et au plus p |
| | alternative |
+ ? . * ^ $ ( ) [ ] { } | \
\
Syntaxe | m/expression/options |
Options | g : toutes les occurrences ; i : ne pas tenir compte de la casse. |
Voici un script qui vérifie les adresses mail passées en paramètre :
#!/usr/bin/perl foreach $param (@ARGV){ if($param =~ m/[_a-zA-Z\d\-\.]+@[_a-zA-Z\d\-]+(\.[_a-zA-Z\d\-]+)/){ print "$param\n"; } else{ print "mauvaise adresse\n"; } } _________________________________________ adresse.pl mac@lim.univ-mrs.fr bidule@truc mac@lim.univ-mrs.fr mauvaise adresse _________________________________________Pour un fichier contenant les noms : INXS, Jackson, Nirvana, Police, Sting, Supertramp le script ci-dessous n'affichera pas INXS et Nirvana.
!/usr/bin/perl print "entrez un nom de fichier : "; $fichier = <STDIN>; chomp($fichier); open(F, $fichier) || die "Problème à l\'ouverture : $!"; while($ligne = <F>) { if($ligne !~ m/N/){ print $ligne; } } _________________________________________ entrez un nom de fichier : chanteurs.txt Jackson Police Sting Supertramp __________________________________________
Syntaxe | s/expression/remplacement/options |
Options | g : toutes les occurrences ; i : ne pas tenir compte de la casse. |
Le script ci-dessous affichera poules ou chevaux si le mot entré était poule ou cheval (le mot entré est modifié dans la variable nom).
#!/usr/bin/perl print "entrez un nom d'animal : "; $nom = <STDIN>; chomp($nom); $nom =~ s/al$/aux/; $nom =~ s/e$/es/; print "pluriel : $nom\n"; ________________________________ entrez un nom d'animal : cheval pluriel : chevaux ________________________________Voici un script qui donne le nombre d'occurrences remplacées, essayez le avec la phrase ci-dessous :
#!/usr/bin/perl print "entrez une phrase : "; $phrase = <STDIN>; $nb = ($phrase =~ s/Internet Explorer/Netscape/gi); print "\n\n$phrase\n"; print "nombre d'occurrences remplacees : $nb\n"; __________________________________________________________ entrez une phrase : J'aime Internet explorer et j'utilise souvent internet Explorer pour lire des pages web J'aime Netscape et j'utilise souvent Netscape pour lire des pages web nombre d'occurrences remplacees : 2 ___________________________________________________________
Syntaxe | tr/expression/remplacement/ |
Le script ci-dessous lit les caractères minuscules et les transforme en majuscules :
#!/usr/bin/perl print "entrez une phrase : "; $phrase = <STDIN>; $phrase =~ tr/[a-z]/[A-Z]/; print "\n$phrase\n"; __________________________________ entrez une phrase : phrase de test PHRASE DE TEST __________________________________