Langages de script - Perl - M2 Pro

Transcription

Langages de script - Perl - M2 Pro
Langages de script - Perl
M2 Pro - 2015/2016
Clément Plancq
[email protected]
LaTTiCe
30 septembre 2015
Expressions régulières
Le terme anglais regular expression devrait se traduire en
français par expression rationnelle mais c’est la traduction
littérale expression régulière qui est en usage dans les pays
francophones
Perl permet d’utiliser les expressions régulières pour la
recherche de motif (pattern matching ) et la substitution
de caractères (search and replace)
Pattern matching
La recherche de motif consiste à vérifier la présence d’un motif,
exprimé à l’aide d’une expression régulière, dans une chaı̂ne de
caractères. La syntaxe est la suivante :
$variable =~ m/motif/
La séquence ci-dessus renvoie true si le motif est trouvé, false sinon
Exemple
#/ u s r / b i n / p e r l
use s t r i c t ;
i f ( ” S t e v e Wozniak and S t e v e J o b s h a v e c r e a t e d A p p l e ” =˜ m/ J o b s /){
p r i n t ” M o t i f t r o u v e \n” ;
}
else{
p r i n t ” M o t i f a b s e n t \n” ;
}
On peut également trouver !~, négation de =~, pour vérifier l’absence
d’un motif.
Search and replace
La substitution consiste à remplacer dans une chaı̂ne de caractères
un motif par une chaı̂ne de remplacement. La syntaxe est la
suivante :
$variable =~ s/motif/cha^
ıne remplacement/
Si le motif est trouvé, la valeur de la variable est modifiée
Exemple
#/ u s r / b i n / p e r l
use s t r i c t ;
my $ v a r = ” S t e v e J o b s i s t h e CEO o f A p p l e ” ;
$ v a r =˜ s / i s / was / ;
p r i n t ” $var ” ;
#S t e v e J o b s was t h e CEO o f A p p l e
Métacaractères
\ Déspécialise le meta-caractère qui suit
ˆ Reconnaı̂t le debut de la ligne
. Reconnaı̂t n’importe quel caractère (sauf le caractère
nouvelle ligne)
$ Reconnaı̂t la fin de la ligne
| Disjonction
() Groupement
[] Classe de caractères
Attention
Pour noter ces caractères en tant que tels dans un motif il faut les
déspécialiser à l’aide de \
Quantificateurs
* Reconnaı̂t 0 fois ou plus
+ Reconnaı̂t 1 fois ou plus
? Reconnaı̂t 0 ou 1 fois
{n} Reconnaı̂t n fois exactement
{n,} Reconnaı̂t au moins n fois
{n,m} Reconnaı̂t au moins n fois mais pas plus de m fois
Attention
Pour noter ces caractères en tant que tels dans un motif il faut les
déspécialiser à l’aide de \
Classes de caractères
Les crochets [..] permettent de définir un ensemble de caractères.
Ainsi le motif [aeiouy] définit l’ensemble des voyelles du français.
Dans un contexte d’ensemble, le tiret permet de spécifier un
intervalle.
Le caractère spécial ˆen tête d’une classe de caractères indique un
classe inverse, c’est-à-dire tout sauf les caractères présents entre
crochets.
exemple
[0-9] ensemble des chiffres arabes (tout caractère entre 0 et 9
dans l’ordre numérique)
[a-z] ensemble des caractères latins minuscules
[^A-Z] tout sauf un caractère latin majuscule
Classes de caractères (2)
∃ des classes de caractères prédéfinies en Perl
classe Perl classe Unicode
raccourci
[ :alpha :]
\p{IsAlpha}
\p{IsLetter}
[ :alnum :] \p{IsAlnum}
[ :digit :]
\p{IsDigit}
\d
[ :lower :]
\p{IsLower}
[ :punct :]
\p{IsPunct}
[ :space :]
\p{IsSpace}
\s
[ :upper :]
\p{IsUpper}
[ :word :]
\p{IsWord}
\w
\b (limite d’un mot)
Classes de caractères (3)
Perl permet plus généralement de faire appel aux propriétés de
caratères unicode (Unicode Character Properties)
Les propriétés pourront être testées avec la syntaxe suivante :
\p{property=value} ou \p{property:value}
Deux propriétés sont particulièrement intéressantes :
Script et Script Extensions
ex : \p{Script:Katakana} \p{Script:Telugu} (voir
Unicode script charts)
Block
ex : \p{Block=Alchemical Symbols} \p{Block=Balinese}
(man perluniprops)
Groupes
L’utilisation des groupes dans les expressions régulières répond à
deux emplois :
Faire d’une disjonction une sous-partie d’une expression
régulière
exemple
/préfixe|suffixe|affixe/ #reconnaı̂t ’préfixe’, ’suffixe’, ’affixe’
/(pré|suf|af)fixe/ #reconnaı̂t ’préfixe’, ’suffixe’, ’affixe’
Extraire une ou plusieurs sous-parties de l’expression régulière
exemple
$ v a r = ” Mort du pape J P I I AFP 02/04/2005 ” ;
i f ( $ v a r =˜ / . ∗ pape . ∗ ([ 0 − 9] { 2 } ) \ /([ 0 − 9] { 2 } ) \ /([ 0 − 9] { 4 } ). ∗ /) {
$ j o u r = $1 ;
$ m o i s = $2 ;
$ a n n e e = $3 ;
p r i n t ” Le pape Jean−P a u l I I e s t mort l e $ a n n e e / $ m o i s / $ j o u r \n” ;
}
Modifieurs
$variable =~ m/motif/modifieur
$variable =~ s/motif/remplacement/modifieur
Liste non exhaustive des modifieurs :
i insensible à la casse
g recherche globale (renvoie la liste des chaı̂nes
correspondant au motif
e éxecute la chaı̂ne de remplacement comme du code
Perl
u utilise les règles Unicode pour le pattern matching
Références
man perlrequick
man perlretut
man perlunicode