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