Académique Documents
Professionnel Documents
Culture Documents
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.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.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 ».
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
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.