1 Expressions régulières/rationnelles
1.1 Introduction
Les expressions rationnelles 1sont des chaînes de caractères dénissant des
langages réguliers 2et utilisés pour reconnaître des motifs. De nombreux outils et
langages de programmation les utilisent pour des recherches et des modications
de texte contextuelles avancées :
Outils en ligne de commandes : grep,sed,awk, …
Langages de scripts : perl,php,python, …
Langages de programmation : java,c++, …
Éditeurs de texte : vi,emacs,jEdit, …
Traitements de texte : LibreOce, …
Il existe de nombreuses variantes et dialectes, cependant il est possible de
distinguer deux grandes familles :
Expression régulière POSIX : l’objectif avec ce standard est de répondre
à la problématique de la multiplication des syntaxe.
PCRE (Perl-Compatible Regular Expression) : Perl est un langage propo-
sant nativement un traitement puissant des expressions régulière. L’en-
semble de fonctionnalités disponible a été implémenté dans une biblio-
thèque à laquelle Il est possible de faire appel dans d’autre contextes.
De manière transversale, les expressions régulières sont utilisées soit pour
eectuer une recherche de motif, soit pour remplacer un motif par une chaîne
de caractère. Les fonctions ont donc la forme suivante :
trouve(regex,texte) booléen
La fonction trouve retourne vrai si le motif regex se trouve dans la
chaîne de caractères texte (il est alors possible de récupérer lla partie
de la chaine reconnue par le motif).
remplace(regex,chaîne,texte) chaîne de caractères
La fonction remplace retourne une chaîne de caractères où les occur-
rences du motif regex dans la chaîne de caractères texte ont été rem-
placées par la chaîne.
On trouve aussi dans les langages de programmation :
découpe(regex,texte) tableau
Cette fonction découpe la chaîne texte par rapport au motif regex, le
résultat est stocké dans un tableau de chaîne de caractères.
1.2 Principe sous-jacent
La reconnaissance de motif se fait à l’aide d’un diagramme de transition. Sa
mise en œuvre se fait à l’aide d’automates nis déterministes (AFD) avec un
état initial et un ou plusieurs états naux. Le principe est le suivant :
1. l’état courant est l’état initial
1. Appelées au départ improprement expressions régulières le terme est entré dans le lan-
gage courant.
2. Il existe de nombreux langages, chacun avec leur spécicités et leurs limites.
1
2. lecture du caractère suivant dans la chaîne d’entrée
3. si il existe un chemin (arc) dont l’étiquette correspond au caractère alors
changer l’état courant avec le nouvel état
si l’état courant est un état nal alors le motif est reconnu
4. sinon l’état courant est l’état initial
5. retourner à l’étape 2
La gure 1 montre le déroulement du processus. L’état courant est en violet, les
états naux en gris. Le vert indique les parties de textes reconnues par le motif.
1.3 Syntaxe
La syntaxe des expressions régulières s’exprime non pas sous formes de mots
clefs mais à partir de caractères, par conséquent un certain nombre de ces ca-
ractères sont réservés car possédant un sens particulier :
()[]{}.*?+^$|
Le caractère \permet de les dé-spécialiser (ainsi \* désigne le caractère étoile
alors que *est un opérateur) ou d’accéder à des caractères non imprimables (par
exemple la tabulation).
Classe de caractères [aeiouy] reconnaît les voyelles
[ˆaeiouy] reconnaît tous les caractères qui ne sont pas des voyelles : p.
ex. 7é n ; ’+
[0-9] reconnaît les chires
[A-z] reconnaît tous les caractères entre A et z donc les caractères entre
Z(90) et a(97)
Classes prédénies \d ou [:digit:] tout caractère numérique : 0, 1, 2,
3, 4, 5, 6, 7, 8, 9
\w ou [:alnum:] (word metacharacter) une lettre [a-z] [A-Z], un chire
[0-9]
\s ou [:space:] (whitespace metacharacter) espace, tabulation, saut
de ligne, ou tout autre caractère non imprimable
\b (word boundary metacharacter) espace, ponctuation, le début du texte,
la n du texte
Caractère quelconque .reconnaît n’importe quel caractère sauf n de
ligne \r et \n
Début/n de ligne Pour les outils en ligne de commande, l’unité pour la
recherche de motif est la ligne, dans les langages de programmation, c’est
la chaîne de caractère.
ˆA reconnaît toutes les lignes / chaînes commençant par un A
A$ reconnaît toutes les lignes / chaînes terminant par un A
Choix |permet d’exprimer une alternative
2
01 2 345
6
78
cheva
l
u
x
01 2 345
6
78
cheva
l
u
x
le chevalier regarde les chevaux galoper le_chevalier regarde les chevaux galoper
01 2 345
6
78
cheva
l
u
x
01 2 345
6
78
cheva
l
u
x
le_chevalier regarde les chevaux galoper le_chevalier regarde les chevaux galoper
01 2 345
6
78
cheva
l
u
x
01 2 345
6
78
cheva
l
u
x
le_chevalier regarde les chevaux galoper le_chevalier regarde les chevaux galoper
01 2 345
6
78
cheva
l
u
x
01 2 345
6
78
cheva
l
u
x
le_chevalier regarde les chevaux galoper le_chevalier regarde les chevaux galoper
01 2 345
6
78
cheva
l
u
x
01 2 345
6
78
cheva
l
u
x
le_chevalier_regarde_les_chevaux galoper le_chevalier_regarde_les_chevaux galoper
01 2 345
6
78
cheva
l
u
x
01 2 345
6
78
cheva
l
u
x
le_chevalier_regarde_les_chevaux galoper le_chevalier_regarde_les_chevaux_galoper
Figure 1 – Reconnaissance à partir de l’automate cheva(l|ux)
Opérateurs de répétition Les opérateurs s’appliquent au caractère qui le
précède.
?0 ou 1 fois
*0 ou n fois
+1 ou n fois
{n} exactement n fois
3
{n,} au moins n fois
{,n} au plus n fois
{n,m} au moins n fois à au plus m fois
Par défaut les moteurs d’expressions régulières cherchent à maximiser
le motif reconnu par une expression régulière L’ajout à l’opérateur du
symbole ?permet au contraire de minimiser le motif reconnu
Parenthèses : groupement et mémorisation Les parenthèse ont une double
signication,elles permettent d’une part d’appliquer un opérateur sur plu-
sieurs caractère, et d’autre part de mémoriser une partie les motifs re-
connus an de les réutiliser ultérieurement dans la partie remplacement.
La référence aux parenthèses se fait par rapport à leur numéro d’ordre
préxé par $ou par \\
4
1 / 4 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !