Vous êtes sur la page 1sur 4

Les expressions régulières

4 avril 2006

Introduction
Les expressions régulières (aussi appellées regexp) sont une famille de notations
compactes et puissantes permettant de décrire certains ensembles de chaînes de ca-
ractères. Elles sont notamment utilisées pour rechercher des morceaux de texte ayant
certaines formes, et éventuellement remplacer ces morceaux de texte par d’autres.
Dans ce TP, nous allons voir la syntaxe utilisée pour définir les expressions régu-
lières et le mettrons en pratique sur plusieurs exemples.

1 Principe
1.1 Syntaxe de base
Les expressions régulières permettent de définir un motif que l’on va utiliser pour
identifier (matcher) des chaînes de caractères.

1.1.1 Reconnaissance de caractères


Les expressions régulières permettent de reconnaitre une chaine de caractère conte-
nant certains termes.
L’expression test permet par exemple de reconnaître la chaîne “test” (un t suivit
d’un e, d’un s, et d’un t). Les crochets ([...]) définissent une classe de caractères, c’est-
à-dire une liste de caractères pouvant être reconnus : [a-z] permet par exemple de re-
connaitre un caractère compris entre a et z, [,. ; : !] permet de reconnaître les principaux
signes de poncuations.
On peut coller plusieurs expressions les unes à la suite des autres, par exemple [a-
z]coin reconnaitra tous les mots commençant par une lettre minuscule, puis c, puis o,
puis i, puis n.
Les parenthèses ((...)) permettent d’isoler un sous-motif.

1.1.2 Répétition
Les accolades permettent d’indiquer un intervalle d’occurences valident : la syntaxe
{m, n} indique que le motif précédent doit apparaître au moins m fois et au plus n fois ;
le deuxième chiffre est facultatif. On a, par exemple :
– a{3} correspond à la chaîne « aaa »
– a{0,2} correspond aux chaines : « aa », « a » et à la chaîne vide
– a{1,} correspond à un ou à plusieurs « a »

1
Les caractères *, ? et + sont une simplification de cette écriture :

caractère équivalence
+ {1,}
{0,}
? {0,1}

On a donc :
– ab* un « a » suivi de zéro ou plusieurs « b »
– ab+ un « a » suivi de un ou plusieurs « b »
– ab ? un « a » suivi de zéro ou un « b »

1.1.3 Alternative et caractère joker


Ainsi :
– ˆ .{3} correspond à une chaîne commençant par trois caractères quelconque sui-
vis d’un « a »
– a. ? correspond à un « a » suivit d’un ou zéro caractère quelconque
– a|b correspond au caractère « a » ou au caractère « b »

1.2 Récapitulatif
caractère d’échappement
ˆ représente le début d’une chaîne de caractères
$ Représente la fin d’une chaîne de caractères
opérateur d’alternative
. remplace n’importe quel caractère
spécificateur de quantité : « zéro, une fois ou plus ce qui précède. »
+ spécificateur de quantité : « une fois ou plus ce qui précède. »
? spécificateur de quantité : « zéro ou une fois ce qui précède. »
{...} spécifie un intervalle de nombre d’occurences de ce qui précède
(...) définie une séquence de caractères
définie une classe de caractères

1.3 Exemples
Voici quelques exemples d’expresisons régulières :
– « chat|chien » : représente les mots « chat » et « chien » (et seulement eux).
– « ([cC]hat|[cC]hien) » : représente « chat », « Chat », « chien » et « Chien ».
– « ch + t » : représente « cht », « chht », « chhht », etc.
– « a[ou]+ » : représente « aou », « ao », « auuu », « aououuuoou » etc.
– « peu[xt]? » : représente « peu », « peux » et « peut ».

1.4 Utilisation des expresisons régulières en C


1.4.1 Bibliothèque PCRE
Pour utiliser la bibliothèque, il faut :
– copier l’ensemble des fichiers (pcre.dll, pcre.exp, pcre.h, pcre.lib, pcreposix.lib)
dans le répertoire du projet
– indiquer au linker de lier le fichier à la librairie :

2
– aller dans Pro ject/S ettings/
– sélectionner l’onglet Link
– dans la ligne Ob ject/Librarymodules ajouter les fichiers pcre.lib et pcreposix.lib

1.4.2 Principe
Les deux principales fonctions de la bibliothèque sont :
pcre_compile : permet de créer une expression régulière
pcre_exec : permet de tester si une chaîne de caractères vérifie une expression régu-
lière ou non. Pour le moment, nous nous intéresserons qu’à la valeur renvoyée
par cette fonction qui vaut 1 si la chaîne vérifie l’expression régulière et −1 sinon.

1.4.3 Exemple

# include " pcre . h"


# i n c l u d e < s t d i o . h>

i n t main ( ) {

pcre ∗ re ;
char ∗ e r r o r ;
int errorOffset ;
int rc ;
int ovector [30];

re = pcre_compile (
" ^A. ∗ Z" , /∗ expression reguliere ∗/
0, / ∗ o p t i o n s par d e f a u t ∗ /
&e r r o r , /∗ erreur ∗/
&e r r o r O f f s e t , / ∗ p o s i t i o n de l ’ e r r e u r ∗ /
NULL ) ; / ∗ t a b l e de c a r a c t e r e p a r d e f a u t ∗ /

i f ( e r r o r != 0 ) {
p r i n t f ( " e r r e u r  l o r s  de  l a  c r e a t i o n  de  l ’ e x p r e s s i o n  r e g u l i e r e \ n " ) ;
} else {
rc = pcre_exec (
re , / ∗ r e s u l t a t de p c r e _ c o m p i l e ( ) ∗ /
NULL,
" ome s t r i n Z " , / ∗ c h a i n e de c a r a c t e r e s a t e s t e r ( c t ) ∗ /
11 , / ∗ l o n g u e u r de c t ∗ /
0, / ∗ ou commencer l ’ a n a l y s e d a n s c t ∗ /
0, / ∗ o p t i o n s par d e f a u t ∗ /
ovector , / ∗ i n t [ ] p o u r s t o c k e r l e s i n f o r m a t i o n s de l ’ a n a
30); / ∗ t a i l l e de i a ∗ /
i f ( r c == 1 ) {
p r i n t f ( " chaine  reconnue \ n" ) ;
} else {
p r i n t f ( " c h a i n e  non  r e c o n n u e \ n " ) ;
}

3
}
}

2 Travail à réaliser
Dans les deux cas suivants, on vous demande de réaliser un programme deman-
dant à l’utilisateur de saisir une chaîne de caractères puis de vérifier si cette chaîne est
conforme à ce qu’on attend.

2.1 Validation d’un mot de passe


Construire une expression régulière permettant de vérifier l’adresse web d’un site.
On tiendra compte des éléments suivant :
– un mot de passe comporte au moins 4 caractères et au maximum 32 caractères
– un mot de passe ne contient que des caractères alphanumériques le signe moins
ou l’underscore.

2.2 Validation d’une URL


Construire une expression régulière permettant de vérifier l’adresse web d’un site.
On tiendra compte des éléments suivant :
– l’addresse d’un site doit commencer par http : //. Toutefois certains sites utili-
sant une communication sécurisée ; leur url commence alors par https : //
– une url se termine par une extension de domaine (.org, .net, ...) qui ne peut être
constitué que de lettres et de 2 à 4 caractères.
– l’adresse peut également contenir un numéro de port : le port est indiqué à la
fin de l’url par un nombre, précédé d’un double point et qui suit l’extension de
domaine.

Vous aimerez peut-être aussi