Aide-mémoire -
Les expressions rationnelles en Perl
Cet document ne regroupe que les fonctions de base. il est par définition imprécis, Ce n'est qu'un aide mémoire destiné aux personnes ayant déja une connaissances des expressions rationnelles. Pour plus de précisions reporter vous aux liens.
> Syntaxe de la reconnaissance et de la substitution
> Les métacaractères
> Les types génériques
> Les assertions simples
> Les quantificateurs
> Les modificateurs
> les variables spéciales de mémorisation
> Quelques assertions en (? )
> liens
Syntaxe de la reconnaissance et de la substitution
$chaine=~/masque/
éventuellement suivi d'un ou plusieurs modificateurs
ou avec "!"
comme délimiteur:
$chaine=~m!masque!
Avec une négation:
$chaine!~m/masque/
Pour la substitution :
$chaine=~s/masque_a_remplacer/remplacement/
éventuellement suivi d'un ou plusieurs modificateur
Les métacaractères
Ce sont les caractères qui ont une significations spéciales dans le masque:\ |
- annule le sens du métacaractère qui le suit. |
. | reconnaît n'importe quel caractère sauf le caractère de nouvelle ligne.(modificateur /s pour qu'il reconnaisse aussi les nouvelle ligne) |
| |
alternative entre plusieurs masques ex: |
() | sous masque |
[] |
Classe de caractères. |
^ | correspond au début de chaîne |
$ | correspond à la fin de la chaîne |
Les
types génériques
reconnaissance: | |
\w |
un caractère de type "mot" = alphanumériques
et blanc souligné. Equivaut à [a-zA-Z_]. |
\d | un chiffre |
\s | un espace |
\W | un caractère qui N'EST PAS de type "mot" |
\D | un caractère qui N'EST PAS de type chiffre |
\S | un caractère qui N'EST PAS un espace |
Les assertions simples
reconnaissance: | |
\b | une limite (boundary) entre un caractère de type "mot" et un "non mot" |
\B | une NON limite |
\A | le début de la chaîne (indépendant du mode multiligne) |
\Z | la fin de la chaîne ou un caractère de nouvelle ligne précédent la fin de la chaine (indépendant du mode multiligne) |
\z | la fin de la chaîne (indépendant du mode multiligne) |
\G | l'endroit ou s'est arrêté le précédent m//g |
\u | le caractère suivant est reconnu s'il est en majuscule (uppercase) |
\l | le caractère suivant est reconnu s'il est en minuscule (lowercase) |
Les quantificateurs
reconnaissance: | |
? | 0 ou 1 fois |
+ | au moins 1 fois |
* | 0, 1 ou plusieurs fois |
{n} | exactement n fois |
{n,m} | au moins n fois et au plus m fois |
{n,} | au moins n fois |
{,m} | au plus m fois |
Les quantificateurs +, * , {} sont gourmands et impatients: ils cherchent à reconnaître la première (en partant de la gauche) plus grande chaîne possible. Pour les rendre non gourmands, il faut les faire suivre de ?.
Les modificateurs
i | rend insensible à la casse |
g | recherche ou substitution global (toute les occurences du masque) |
m | rend multiligne: ^ et $ reconnaisent le debut ou la fin de chaque ligne |
s | traite la chaîne en une seule ligne. Le métacaractère "." reconnait alors les nouvelles lignes. |
e | évalue l'expression de droite dans une substitution comme du code Perl |
o | compile l'expression qu'une seule fois (once) |
x | permet d'utiliser des espaces et des commentaires |
Les variables spéciales de mémorisation
$1 |
mémorise la reconnaissance du 1er sous masque (partie du motif contenu entre parenthèses) |
$n | mémorise la reconnaissance du n ème sous masque |
$& | mémorise la reconnaissance de tous le masque |
$` | mémorise tout ce qui est avant le masque reconnu |
$' | mémorise tout ce qui est après le masque reconnu |
\n | mémorise la reconnaissance du n ème sous masque, à éviter en Perl. |
Quelques assertions en (? )
Les sous masques qu'ils introduisent sont non capturant.
(?:sous-masque)
|
Sous-masque non capturant |
(?=sous-masque) | reconnaît la presence du sous-masque "en avant" (= juste à droite de cette assertion) |
(?!sous-masque) | reconnaît l'absence du sous-masque "en avant" (= juste à droite de cette assertion) |
(?<=sous-masque) | reconnaît la presence du sous-masque "en arrière" (= juste à gauche de cette assertion) |
(?<!sous-masque) | reconnaît l'absence du sous-masque "en arrière" (= juste à gauche de cette assertion) |
Je vous recommande la documentation de PHP.
PHP possède en effet des expressions rationnelles compatibles Perl
(PCRE: Perl Compatible Regular expression) et sa documentation est beaucoup
plus lisible que celle de Perl:
La FAQ Perl sur les expressions rationnelles en français:
http://www.enstimac.fr/Perl/DocFr/perlfaq6.html
La documentation Perl officielle en français (difficile et pointue!):
http://www.enstimac.fr/Perl/DocFr/perlre.html