ORdI&ORbI n'Web...

Accueil

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.
- permet d'introduire des caractères invisibles : \n,\t ...
- introduit des types génériques de valeurs : \w, \s ...
- introduit les assertions simples \b, \B ...

. 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:
/chats|souris/ cherche les masques chats ou souris
/chev(al|aux)/ cherche cheval ou chevaux

() sous masque
[]

Classe de caractères.
ex:
- [abc] reconnaît a ou b ou c
- [a-z] pour indiquer un intervalle de caractères
- [^ab] le ^ indique le complément : tout les caractères sauf le a et le b
A l'interieur de la classe les caractères de ce tableau perdent leur sens de métacaractère.

^ 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_].
- est affecté par la locale

\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)
(?imsx-imsx: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)

Liens

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:

http://www.nexen.net/docs/php/annotee/ref.pcre.php

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