Académique Documents
Professionnel Documents
Culture Documents
Les expressions
régulières
par l’exemple
Vincent Fourmond
Ancien élève de l’École Normale Supérieure
Quinze années d’expérience dans dix langages de programmation
Avant-propos
Vincent Fourmond
Table des matières
Avant-propos 3
Annexes
A Solutions des exercices 111
A.1 Exercices du chapitre 2 . . . . . . . . . . . . . . . . . . . . . 111
A.2 Exercices du chapitre 3 . . . . . . . . . . . . . . . . . . . . . 116
Index 124
Chapitre 1
Qu’est-ce qu’une
expression régulière ?
Quelques conventions
Avant de passer à un premier exemple, détaillons quelques
conventions que nous avons adoptées dans ce livre.
Un texte entre "guillemets américains" représente une
chaîne de caractères : c’est une entité qu’en tant que program-
meur vous ne taperez quasiment jamais. De telles chaînes
10 Ch. 1 – Qu’est-ce qu’une expression régulière ?
/@/
3.1 Remplacements
Nous nous sommes limités dans le chapitre précédent à
observer des chaînes de caractères et à y chercher des corres-
pondances. Nous allons aussi dans ce chapitre apprendre à les
modifier, à l’aide de la fonction de remplacement :
Symboles [f-h] . . . . . . . . . . . . . . . . . 21
"chaîne" . . . . . . . . . . . . . 10 \ . . . . . . . . . . . . . . . . . . 12, 22
« élement » . . . . . . . . . . . 10 ␣ . . . . . . . . . . . . . . . . . . . . . . 10
$ . . . . . . . . . . . . . . . . . . 13, 32 ˆ . . . . . . . . . . . . . . 13, 32, 41
$& . . . . . . . . . . . . . . . . . . . . 64 {5,12} . . . . . . . . . . . . . . . . 46
(ab)+ . . . . . . . . . . . . . . . . . 27 {5,12}? . . . . . . . . . . . . . . .49
(b|c|d) . . . . . . . . . . . . . . .25 {5,} . . . . . . . . . . . . . . . . . . 47
* . . . . . . . . . . . . . . . . . . . . . . 31 {5} . . . . . . . . . . . . . . . . . . . 47
*? . . . . . . . . . . . . . . . . . . . . 49 | . . . . . . . . . . . . . . . . . . . . . . 24
+ . . . . . . . . . . . . . . . . . . 11, 27
Nombres
\+ . . . . . . . . . . . . . . . . . . . . 28
+? . . . . . . . . . . . . . . . . . . . . 49 $1 . . . . . . . . . . . . . . . . . . . . 52
- . . . . . . . . . . . . . . . . . . . . . . 40 \1 . . . . . . . . . . . . . . . . . . . . 55
. . . . . . . . . . . . . . . . . . . 11, 19
\. . . . . . . . . . . . . . . . . 12, 23 A
.+ . . . . . . . . . . . . . . . . 11, 27 Alternance . . . . . . . . . . . . 24
\.+ . . . . . . . . . . . . . . . . . . . 28 Avidité . . . . . . . . . . . . . . . . 29
/expression/ . . . . . . . . .10
/ . . . . . . . . . . . . . . . . . . . . . . 23 B
? . . . . . . . . . . . . . . . . . . . . . . 30
[0-9] . . . . . . . . . . . . . . . . . 20 \B . . . . . . . . . . . . . . . . . . . . 59
[1b-d7P-S] . . . . . . . . . . . 40 \b . . . . . . . . . . . . . . . . . . . . 59
[[:alpha:]] . . . . . . . . . . 72
C
[[:class:]] . . . . . . . . . . . 72
[ˆf-h2] . . . . . . . . . . .13, 41 C# . . . . . . . . . . . . . . . . . . . 88
[A-Z] . . . . . . . . . . . . . . . . . 20 C+ + /Qt . . . . . . . . . . . . . 94
[a-z] . . . . . . . . . . . . . . . . . 20 C/POSIX . . . . . . . . . . . . . 99
[a-z]+ . . . . . . . . . . . . . . . . 28 Capture . . . . . . . . . . . . . . . 51
[A-Za-z] . . . . . . . . . . . . . 21 Caractère d’échappement
[cgz] . . . . . . . . . . . . . . . . . 37 . . . . . . . . . . . . . . 23
Index 125
g . . . . . . . . . . . . . . . 36, 64 R
i . . . . . . . . . . . . . . . . . . . 48
Référence interne . . . . . . 55
m . . . . . . . . . . . . . . . . . . . 71
Regex . . . . . . . . . . . . . . . . . 14
s . . . . . . . . . . . . . . . . . . . 70
Regexp . . . . . . . . . . . . . . . .14
x . . . . . . . . . . . . . . . 65, 67
Regular expression . . . . 14
Remplacement 35, 52, 62,
N 64
Négation . . . . . . . . . . . . . . 13 Retour à la ligne . . . . . . 70
Nettoyer . . . . . . . . . . . . . . 64
Nombres premiers . . . . . 57
S
Non avidité . . . . . . . . . . . 49 \S . . . . . . . . . . . . . . . . . . . . 44
\s . . . . . . . . . . . . . . . . . . . . 43
P s . . . . . . . . . . . . . . . . . . . . . . 70
s/a/b/ . . . . . . . . . . . . . . . . 35
Parenthèses . . . . . . . . . . . 25 s/a/b/g . . . . . . . . . . . . . . .36
capturantes . . . . . . . . . 51 Sed . . . . . . . . . . . . . . . . . . 104
Perl . . . . . . . . . . . . . . . 10, 76 Substitution . . . . . . . . . voir
PHP . . . . . . . . . . . . . . . . . . 81 Remplacement
POSIX . . . . . . . . . . . . 72, 99
Protéger . . . voir Échapper T
Python . . . . . . . . . . . . . . . .91
Tableau associatif . . . . . 69
Tests simples . . . . . . . . . . 61
Q
Qt . . . . . . . . . . . . . . . . . . . . 94 U
Quantificateurs . . . . 27–31 Unicode
*? . . . . . . . . . . . . . . . . . . 49 \p{classe} . . . . . . . . . 73
* . . . . . . . . . . . . . . . . . . . 31
+? . . . . . . . . . . . . . . . . . . 49 W
+ . . . . . . . . . . . . . . . 11, 27
\W . . . . . . . . . . . . . . . . . . . . 44
? . . . . . . . . . . . . . . . . . . . 30
\w . . . . . . . . . . . . . . . . . . . . 43
{5,12}? . . . . . . . . . . . . 49
{5,12} . . . . . . . . . . . . . 46 X
{5,} . . . . . . . . . . . . . . . . 47
{5} . . . . . . . . . . . . . . . . . 47 x . . . . . . . . . . . . . . . . . . 65, 67
Non avides . . . . . . . . . . 49