syntaxe et mise en œuvre (avec exercices et corrigés...

32
Martial BORNET Expressions régulières Syntaxe et mise en œuvre (avec exercices et corrigés)

Upload: ngonga

Post on 29-Oct-2018

218 views

Category:

Documents


0 download

TRANSCRIPT

ISBN

: 97

8-2-

7460

-971

2-4

29,9

0 € Ex

pres

sion

s ré

guliè

res -

Syn

taxe

et m

ise e

n œ

uvre

Pour plus d’informations :

Martial BORNET

Expressions régulières

Syntaxe et mise en œuvre (avec exercices et corrigés)

Ce livre s’adresse à tout informaticien (étudiant, développeur, ingénieur système, ...) désirant comprendre et maîtriser les ex-pressions régulières.Il commence par un bref rappel de l’origine mathématique des expressions régulières, puis détaille leurs différents types, de-puis les expressions de sélection du shell jusqu’aux expressions régulières étendues interprétées par différents langages tels Perl ou Python.L’auteur a choisi une approche résolument pratique et les cha-pitres suivants présentent les expressions régulières dans le contexte des différentes commandes qui ont contribué au succès d’Unix et Linux (shells, find, ed, sed, ex, vi, vim, bvi, grep, egrep, expr, awk, du, lex), puis dans celui des fonctions d’éva-luation (glob(), regcomp(), regexec()) et de différents langages (Perl, Python, Javascript).De nombreux exemples ainsi que des exercices, corrigés de façon détaillée, montrent de façon pédagogique et progressive comment produire des expressions régulières fiables et com-préhensibles.La dernière partie propose des synthèses relatives aux différents types d’expressions et à leurs méta-caractères, liste les princi-paux outils les utilisant, les classes de caractères POSIX, ainsi que des outils de contrôle et des méthodes de validation, par-fois visuelles, des expressions régulières.Les explications détaillées permettent une compréhension fine de la signification des méta-caractères et des expressions qui les em-ploient, permettant au lecteur de créer ses propres expressions régulières et de comprendre celles écrites par d’autres personnes.D’autre part, des conseils d’écriture aident à transmettre les expres-sions régulières aux outils auxquels elles sont destinées sans risque de modifications indésirables, et ainsi à éviter des erreurs classiques mais néanmoins fréquentes et parfois difficiles à localiser.Des éléments complémentaires sont en téléchargement sur le site www.editions-eni.fr.

Martial BORNET est ingénieur en informatique depuis près de 30 ans, diplômé de Supinfo. Il a débuté sa carrière dans une start-up pion-nière dans le monde du réseau local, en tant que développeur réseau et système. Actuelle-ment consultant en Système, spécialisé sur Unix et ses dérivés, il effectue des missions d’expertise dans des start-up de haut niveau ou chez des grands comptes et exploite très fré-quemment les expressions régulières dans le cadre de ses développements.

Expressions régulières Syntaxe et mise en œuvre (avec exercices et corrigés)

Téléchargementwww.editions-eni.fr.fr

sur www.editions-eni.fr : b Les sources du programme "args" d’aide

à la maîtrise de la syntaxe du shell,b Les sources du programme "hl" de colorisation.b Des exemples de programmes C, awk, python, perl...

Les chapitres du livre

Avant-propos • Introduction • Les interpréteurs de commandes, ou shell • find, la commande de recherche de fichiers • ed, l’éditeur ligne • sed, l’éditeur de flux (stream editor) • ex, l’édi-teur ligne de vi • vi, le premier éditeur plein écran • vim, l’éditeur vi amélioré (Vi IMpro-ved) • bvi, l’éditeur binaire/hexadécimal plein écran • grep, la commande de recherche de lignes • expr, la commande d’évaluation d’ex-pressions • awk, la commande de traitement de fichiers • du, l’affichage de l’usage des disques • lex, le générateur d’analyseurs lexi-caux • glob(), la fonction de sélection de path-names • rescomp(), regexec(), la gestion des ER • hl, une commande de colorisation • Les expressions régulières en Python • Les expres-sions régulières en Perl • Les expressions ré-gulières en JavaScript • Synthèse des types d’expression • Les classes de caractères PO-SIX • Équivalences d’expressions régulières • Outils de validation d’expressions régulières • Quelques exercices récapitulatifs • Annexes

1Table des matières

Avant-propos

Chapitre 1Introduction

1. Qu'est-ce qu'une expression régulière ? . . . . . . . . . . . . . . . . . . . . . . . . 27

2. Qu'est-ce qu'un métacaractère ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

3. Origine des expressions régulières . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

4. Avertissement relatif aux expressions régulières . . . . . . . . . . . . . . . . 30

5. Avertissement relatif aux commandes GNU/Linux. . . . . . . . . . . . . . 30

6. Avertissement relatif à la portabilité . . . . . . . . . . . . . . . . . . . . . . . . . . 30

7. Rappels de base concernant le shell . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

8. Conseil important pour la qualité et la fiabilité du code . . . . . . . . . . 31

9. Programme d'aide à la compréhension du shell . . . . . . . . . . . . . . . . . 32

Chapitre 2Les interpréteurs de commandes, ou shells

1. Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

2. Historique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

3. Les caractères de sélection de noms de fichiers. . . . . . . . . . . . . . . . . . 373.1 La découverte des expressions régulières par l'utilisateur . . . . . 373.2 La spécificité des expressions de sélection du shell. . . . . . . . . . . 373.3 Rappel sur les fichiers cachés . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

Les éléments à télécharger sont disponibles à l'adresse suivante :http://www.editions-eni.fr

Saisissez la référence ENI de l'ouvrage RIEXRE dans la zone de recherche et validez. Cliquez sur le titre du livre puis sur le bouton de téléchargement.

2Syntaxe et mise en œuvre (avec exercices et corrigés)

Expressions régulières

3.4 Le métacaractère * . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393.5 Le métacaractère ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413.6 Les métacaractères [ ] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

4. Les autres caractères spéciaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

5. La commande de traitements sélectifs . . . . . . . . . . . . . . . . . . . . . . . . 455.1 Le métacaractère * . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

5.1.1 Exemple 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 475.1.2 Exemple 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47

5.2 Le métacaractère ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485.2.1 Exemple. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

5.3 Les métacaractères [ ] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 495.3.1 Exemple 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 495.3.2 Exemple 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 505.3.3 Exemple 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 505.3.4 Conseil d'écriture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

6. Mise en garde sur le décodage des arguments. . . . . . . . . . . . . . . . . . . 53

7. Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 577.1 Exercice 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 577.2 Exercice 2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 587.3 Exercice 3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 587.4 Exercice 4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 597.5 Exercice 5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 647.6 Exercice 6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 647.7 Exercice 7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 657.8 Exercice 8. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

3Table des matières

Chapitre 3find, la commande de recherche de fichiers

1. Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

2. Principe de fonctionnement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68

3. Les options liées à l'i-node . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 703.1 Option -type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 703.2 Option -perm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 713.3 Option -links. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 713.4 Option -user . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 723.5 Option -uid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 723.6 Option -group . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 733.7 Option -size . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 733.8 Option -inum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 743.9 Option -atime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 743.10 Option -mtime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 753.11 Option -exec . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 753.12 Option -ok. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 763.13 Option -print . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 773.14 Option -newer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 783.15 Option -ls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 783.16 Option -prune . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 793.17 Autres options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80

4. Les options liées au nom . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 804.1 Option -name . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 814.2 Option -iname . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 824.3 Option -lname . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 824.4 Option -ilname . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 844.5 Option -path . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 854.6 Option -ipath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 864.7 Option -regex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 874.8 Option -iregex. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 884.9 Option -regextype . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88

4Syntaxe et mise en œuvre (avec exercices et corrigés)

Expressions régulières

4.10 Option -wholename . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 894.11 Option -iwholename . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90

5. Les expressions de sélection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 905.1 Utilisation du caractère ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 905.2 Utilisation du caractère * . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 905.3 Utilisation des caractères [ et ] . . . . . . . . . . . . . . . . . . . . . . . . . . 90

6. Les expressions étendues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 916.1 Utilisation du caractère . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 916.2 Utilisation des caractères [ et ] . . . . . . . . . . . . . . . . . . . . . . . . . . 916.3 Utilisation du caractère * . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 916.4 Utilisation du caractère + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 916.5 Utilisation du caractère ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 916.6 Utilisation du caractère | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 926.7 Utilisation des caractères ( et ) . . . . . . . . . . . . . . . . . . . . . . . . . . 926.8 Utilisation du caractère ^ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 926.9 Utilisation du caractère $ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 926.10 Utilisation du caractère \ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 926.11 Utilisation des caractères { et } . . . . . . . . . . . . . . . . . . . . . . . . . . 92

7. Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 937.1 Exercice 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 937.2 Exercice 2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 947.3 Exercice 3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 957.4 Exercice 4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 967.5 Exercice 5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 977.6 Exercice 6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97

Chapitre 4ed, l'éditeur ligne

1. Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99

2. Rappel de quelques commandes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1002.1 Les différents modes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100

5Table des matières

2.2 Adressage des lignes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1012.2.1 Références à des lignes par numéros . . . . . . . . . . . . . . . . 1012.2.2 Références à des lignes par des recherches . . . . . . . . . . . 102

2.3 Recherche de chaînes de caractères . . . . . . . . . . . . . . . . . . . . . . 1022.4 Recherche globale de chaînes de caractères. . . . . . . . . . . . . . . . 1032.5 Saisie de texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1042.6 Suppression de lignes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1042.7 Affichage des lignes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1052.8 Substitution de chaînes de caractères . . . . . . . . . . . . . . . . . . . . 1062.9 Enregistrement des modifications . . . . . . . . . . . . . . . . . . . . . . . 1072.10 Sortie de l'éditeur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108

3. Les expressions régulières . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1083.1 Généralités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1083.2 Utilisation du caractère ^ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108

3.2.1 Signification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1083.2.2 Recherche d'une expression en début de ligne . . . . . . . . 1093.2.3 Insertion d'une chaîne en début de ligne. . . . . . . . . . . . . 1093.2.4 Substitution d'une expression en début de ligne . . . . . . 110

3.3 Utilisation du caractère $ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1103.3.1 Ajout d'une chaîne en fin de ligne . . . . . . . . . . . . . . . . . . 1103.3.2 Substitution d'une expression en fin de chaîne . . . . . . . 111

3.4 Utilisation du caractère . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1113.5 Utilisation des caractères [ ]. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1113.6 Utilisation du caractère * . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1123.7 Utilisation des caractères \< et \> . . . . . . . . . . . . . . . . . . . . . . 112

3.7.1 Recherche d'un début de mot . . . . . . . . . . . . . . . . . . . . . 1133.7.2 Recherche d'une fin de mot . . . . . . . . . . . . . . . . . . . . . . . 1133.7.3 Recherche d'un mot entier . . . . . . . . . . . . . . . . . . . . . . . . 113

3.8 Utilisation du caractère & . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1143.9 Référence à des expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115

4. Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1174.1 Suppression en fin de ligne . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117

4.1.1 Exercice 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117

6Syntaxe et mise en œuvre (avec exercices et corrigés)

Expressions régulières

4.2 Insertion en début de ligne . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1174.2.1 Exercice 2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117

4.3 Substitution de chaîne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1184.3.1 Exercice 3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118

4.4 Substitution avec références . . . . . . . . . . . . . . . . . . . . . . . . . . . 1184.4.1 Exercice 4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1184.4.2 Exercice 5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1194.4.3 Exercice 6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1204.4.4 Exercice 7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120

4.5 Affichage sélectif. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1214.5.1 Exercice 8. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1214.5.2 Exercice 9. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1214.5.3 Exercice 10. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122

4.6 Insertion en début de ligne . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1244.6.1 Exercice 11. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124

Chapitre 5sed, l'éditeur de flux (stream editor)

1. Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125

2. Rappels de fonctionnement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1262.1 Principe de fonctionnement. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1262.2 Adressage des lignes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127

2.2.1 Principe d'adressage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1272.2.2 Références à des lignes par numéros . . . . . . . . . . . . . . . . 1282.2.3 Références à des lignes par des recherches . . . . . . . . . . . 128

2.3 Rappel de quelques commandes . . . . . . . . . . . . . . . . . . . . . . . . 1292.3.1 Recherche de chaînes de caractères . . . . . . . . . . . . . . . . . 1292.3.2 Ajout de texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1292.3.3 Insertion de texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1302.3.4 Remplacement de texte . . . . . . . . . . . . . . . . . . . . . . . . . . 1312.3.5 Suppression de texte. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1322.3.6 Substitution de texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133

7Table des matières

2.3.7 Définition d'étiquette. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1342.3.8 Branchement inconditionnel . . . . . . . . . . . . . . . . . . . . . . 1352.3.9 Branchement conditionnel. . . . . . . . . . . . . . . . . . . . . . . . 1352.3.10Groupement d'instructions . . . . . . . . . . . . . . . . . . . . . . . 135

3. Les expressions basiques. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1363.1 Utilisation du caractère ^ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136

3.1.1 Signification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1363.1.2 Recherche d'une expression en début de ligne . . . . . . . . 1363.1.3 Insertion d'une chaîne en début de ligne . . . . . . . . . . . . 1373.1.4 Substitution d'une expression en début de ligne . . . . . . 138

3.2 Utilisation du caractère $ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1383.2.1 Signification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1383.2.2 Ajout d'une chaîne en fin de ligne . . . . . . . . . . . . . . . . . . 1383.2.3 Substitution d'une expression en fin de ligne . . . . . . . . 139

3.3 Utilisation du caractère . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1393.4 Utilisation des caractères [ ] . . . . . . . . . . . . . . . . . . . . . . . . . . . 1393.5 Utilisation du caractère * . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1403.6 Utilisation du caractère & . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1413.7 Référence à des expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141

4. Les expressions étendues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1424.1 Avertissement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1424.2 Utilisation du caractère . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1424.3 Utilisation des caractères [ et ] . . . . . . . . . . . . . . . . . . . . . . . . . 1424.4 Utilisation du caractère * . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1434.5 Utilisation du caractère + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1434.6 Utilisation du caractère ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1434.7 Utilisation du caractère | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1434.8 Utilisation des caractères ( et ) . . . . . . . . . . . . . . . . . . . . . . . . . 1434.9 Utilisation du caractère ^ . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1434.10 Utilisation du caractère $ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1444.11 Utilisation du caractère \ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1444.12 Utilisation des caractères { et } . . . . . . . . . . . . . . . . . . . . . . . . . 144

8Syntaxe et mise en œuvre (avec exercices et corrigés)

Expressions régulières

5. Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1455.1 Exercice 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1455.2 Exercice 2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1465.3 Exercice 3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1475.4 Exercice 4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1485.5 Exercice 5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1495.6 Exercice 6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150

Chapitre 6ex, l'éditeur ligne de vi

1. Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151

2. Principe de fonctionnement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152

3. Rappel de quelques commandes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1533.1 Les différents modes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153

3.1.1 Interface utilisateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1533.1.2 Mode commandes, mode saisie . . . . . . . . . . . . . . . . . . . . 153

3.2 Adressage des lignes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1543.2.1 Références à des lignes par numéros . . . . . . . . . . . . . . . . 1553.2.2 Références à des lignes par des recherches . . . . . . . . . . . 156

3.3 Recherche de chaînes de caractères . . . . . . . . . . . . . . . . . . . . . . 1563.4 Recherche globale de chaînes de caractères. . . . . . . . . . . . . . . . 1573.5 Saisie de texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1583.6 Suppression de lignes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161

3.6.1 Suppression de la ligne courante . . . . . . . . . . . . . . . . . . . 1613.6.2 Suppression d'une ligne . . . . . . . . . . . . . . . . . . . . . . . . . . 1613.6.3 Suppression d'un groupe de lignes. . . . . . . . . . . . . . . . . . 161

3.7 Affichage des lignes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1623.8 Substitution de chaînes de caractères . . . . . . . . . . . . . . . . . . . . 1633.9 Manipulation de la casse des lettres . . . . . . . . . . . . . . . . . . . . . 164

3.9.1 Séquence \u. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1643.9.2 Séquence \U . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1653.9.3 Séquence \l . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165

9Table des matières

3.9.4 Séquence \L . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1653.9.5 Séquence \e ou \E . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166

3.10 Enregistrement des modifications . . . . . . . . . . . . . . . . . . . . . . . 1673.11 Sortie de l'éditeur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167

4. Quelques spécificités de ex par rapport à ed . . . . . . . . . . . . . . . . . . . 167

5. Les expressions régulières . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1695.1 Généralités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1695.2 Utilisation du caractère ^ . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169

5.2.1 Utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1695.2.2 Recherche d'une expression en début de ligne . . . . . . . . 1695.2.3 Insertion d'une chaîne en début de ligne. . . . . . . . . . . . . 1705.2.4 Substitution d'une expression en début de ligne . . . . . . 170

5.3 Utilisation du caractère $ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1705.3.1 Ajout d'une chaîne en fin de ligne . . . . . . . . . . . . . . . . . 1715.3.2 Substitution d'une expression en fin de chaîne . . . . . . . 171

5.4 Utilisation du caractère . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1715.5 Utilisation des caractères [ ] . . . . . . . . . . . . . . . . . . . . . . . . . . . 1725.6 Utilisation du caractère * . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1725.7 Utilisation des caractères \< et \> . . . . . . . . . . . . . . . . . . . . . 172

5.7.1 Recherche d'un début de mot . . . . . . . . . . . . . . . . . . . . . 1735.7.2 Recherche d'une fin de mot . . . . . . . . . . . . . . . . . . . . . . . 1735.7.3 Recherche d'un mot entier . . . . . . . . . . . . . . . . . . . . . . . . 173

5.8 Utilisation du caractère & . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1745.9 Référence à des expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175

6. Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1766.1 Exercice 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176

10Syntaxe et mise en œuvre (avec exercices et corrigés)

Expressions régulières

Chapitre 7vi, le premier éditeur plein écran

1. Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177

2. Principe de fonctionnement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1782.1 Généralités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1782.2 Rappel de quelques commandes . . . . . . . . . . . . . . . . . . . . . . . . 178

2.2.1 Édition d'un fichier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1782.2.2 Ajout de texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1792.2.3 Insertion de texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1792.2.4 Modification de texte. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1792.2.5 Suppression de texte. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1802.2.6 Enregistrement des modifications . . . . . . . . . . . . . . . . . . 1812.2.7 Accès au mode ligne de ex . . . . . . . . . . . . . . . . . . . . . . . . 1812.2.8 Accès aux variables de paramétrage . . . . . . . . . . . . . . . . 181

3. Les expressions régulières . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1823.1 Généralités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1823.2 Recherches de chaînes de caractères . . . . . . . . . . . . . . . . . . . . . 1833.3 Utilisation du caractère ^ . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1843.4 Utilisation du caractère $ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1843.5 Utilisation du caractère . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1843.6 Utilisation des caractères [ ] . . . . . . . . . . . . . . . . . . . . . . . . . . . 1843.7 Utilisation du caractère * . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1853.8 Utilisation des caractères \< et \> . . . . . . . . . . . . . . . . . . . . . 185

3.8.1 Recherche d'un début de mot . . . . . . . . . . . . . . . . . . . . . 1863.8.2 Recherche d'une fin de mot . . . . . . . . . . . . . . . . . . . . . . . 1863.8.3 Recherche d'un mot entier . . . . . . . . . . . . . . . . . . . . . . . . 186

11Table des matières

Chapitre 8vim, l'éditeur vi amélioré (Vi IMproved)

1. Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187

2. Principe de fonctionnement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1882.1 Généralités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1882.2 Spécificités. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188

2.2.1 Avertissement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1882.2.2 Mise en surbrillance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1892.2.3 Reconnaissance de caractères particuliers . . . . . . . . . . . . 1902.2.4 Accès aux expressions régulières étendues . . . . . . . . . . . 192

3. Les expressions régulières basiques . . . . . . . . . . . . . . . . . . . . . . . . . . 1923.1 Utilisation du caractère ^ . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1923.2 Utilisation du caractère $ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1923.3 Utilisation du caractère . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1923.4 Utilisation des caractères [ ] . . . . . . . . . . . . . . . . . . . . . . . . . . . 1933.5 Utilisation du caractère * . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1933.6 Utilisation des caractères \< et \> . . . . . . . . . . . . . . . . . . . . . 194

3.6.1 Recherche d'un début de mot . . . . . . . . . . . . . . . . . . . . . 1943.6.2 Recherche d'une fin de mot . . . . . . . . . . . . . . . . . . . . . . . 1943.6.3 Recherche d'un mot entier . . . . . . . . . . . . . . . . . . . . . . . 194

4. Les expressions régulières étendues . . . . . . . . . . . . . . . . . . . . . . . . . . 1954.1 Utilisation du caractère ^ . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1954.2 Utilisation du caractère $ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1954.3 Utilisation du caractère . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1954.4 Utilisation des caractères [ ]. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1964.5 Utilisation des caractères \( ... \) . . . . . . . . . . . . . . . . . . . . . . . 1964.6 Utilisation du caractère * . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1964.7 Utilisation des caractères \+ . . . . . . . . . . . . . . . . . . . . . . . . . . . 1974.8 Utilisation des caractères \? . . . . . . . . . . . . . . . . . . . . . . . . . . . 1974.9 Utilisation des caractères \{n,p} . . . . . . . . . . . . . . . . . . . . . . . 1974.10 Utilisation des caractères \{n,} . . . . . . . . . . . . . . . . . . . . . . . . . 1974.11 Utilisation des caractères \{,p} . . . . . . . . . . . . . . . . . . . . . . . . . 197

12Syntaxe et mise en œuvre (avec exercices et corrigés)

Expressions régulières

4.12 Utilisation des caractères \{n} . . . . . . . . . . . . . . . . . . . . . . . . . 1984.13 Utilisation des caractères \{} . . . . . . . . . . . . . . . . . . . . . . . . . . 1984.14 Utilisation des caractères \{-n,p} . . . . . . . . . . . . . . . . . . . . . . . 1984.15 Utilisation des caractères \{-n} . . . . . . . . . . . . . . . . . . . . . . . . 1984.16 Utilisation des caractères \{-n,} . . . . . . . . . . . . . . . . . . . . . . . . 1984.17 Utilisation des caractères \{-,p} . . . . . . . . . . . . . . . . . . . . . . . . 1984.18 Utilisation des caractères \{-} . . . . . . . . . . . . . . . . . . . . . . . . . . 1994.19 Utilisation des caractères \| . . . . . . . . . . . . . . . . . . . . . . . . . . . 1994.20 Utilisation des caractères \< et \> . . . . . . . . . . . . . . . . . . . . . 199

Chapitre 9bvi, l'éditeur binaire/hexadécimal plein écran

1. Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201

2. Points communs avec vi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203

3. Spécificités de bvi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203

4. Rappel de quelques commandes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2044.1 Avertissement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2044.2 Positionnement en début de ligne . . . . . . . . . . . . . . . . . . . . . . . 2054.3 Positionnement en fin de ligne . . . . . . . . . . . . . . . . . . . . . . . . . 2054.4 Déplacements du curseur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2054.5 Ajout d'octets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2064.6 Insertion d'octets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2064.7 Remplacement d'octets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2074.8 Suppression d'octets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2074.9 Écriture du fichier modifié . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208

5. Les expressions régulières . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2085.1 Généralités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2085.2 Recherche en début de ligne . . . . . . . . . . . . . . . . . . . . . . . . . . . 2085.3 Recherche en fin de ligne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2095.4 Recherche d'expressions régulières . . . . . . . . . . . . . . . . . . . . . . 209

5.4.1 Modes de recherche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209

13Table des matières

5.4.2 Utilisation du caractère . . . . . . . . . . . . . . . . . . . . . . . . . . 2105.4.3 Utilisation des caractères [ ] . . . . . . . . . . . . . . . . . . . . . . 2105.4.4 Utilisation du caractère * . . . . . . . . . . . . . . . . . . . . . . . . 210

6. Commande bmore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211

7. Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2127.1 Exercice 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2127.2 Exercice 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2137.3 Exercice 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2137.4 Exercice 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2147.5 Exercice 5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2157.6 Exercice 6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2157.7 Exercice 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2167.8 Exercice 8. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218

Chapitre 10grep, la commande de recherche de lignes

1. Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219

2. Principe de fonctionnement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2202.1 Généralités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2202.2 Rappel de quelques options . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221

3. Les expressions basiques. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2213.1 Généralités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2213.2 Utilisation du caractère ^ . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2223.3 Utilisation du caractère $ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2223.4 Utilisation du caractère . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2223.5 Utilisation du caractère * . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2233.6 Utilisation des caractères [ ] . . . . . . . . . . . . . . . . . . . . . . . . . . . 2233.7 Utilisation des caractères \< et \> . . . . . . . . . . . . . . . . . . . . . 2243.8 Utilisation du caractère \ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2243.9 Classes de caractères. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224

4. Les expressions étendues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225

14Syntaxe et mise en œuvre (avec exercices et corrigés)

Expressions régulières

4.1 Généralités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2254.2 Utilisation des caractères ( ). . . . . . . . . . . . . . . . . . . . . . . . . . . . 2254.3 Utilisation du caractère | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2264.4 Utilisation du caractère ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2264.5 Utilisation du caractère * . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2264.6 Utilisation du caractère + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2264.7 Utilisation des caractères { } . . . . . . . . . . . . . . . . . . . . . . . . . . 227

5. Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2285.1 Exercice 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2285.2 Exercice 2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2285.3 Exercice 3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2295.4 Exercice 4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2315.5 Exercice 5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2345.6 Exercice 6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236

Chapitre 11expr, la commande d'évaluation d'expressions

1. Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239

2. Principe de fonctionnement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2402.1 Généralités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2402.2 Les parenthèses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2412.3 Les opérateurs arithmétiques. . . . . . . . . . . . . . . . . . . . . . . . . . . 2412.4 Les opérateurs de comparaison . . . . . . . . . . . . . . . . . . . . . . . . . 2422.5 Les opérateurs booléens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2432.6 La comparaison à une expression régulière . . . . . . . . . . . . . . . . 2442.7 Extraction d'une chaîne correspondant à une expression . . . . 245

3. Attention aux pièges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2453.1 Interprétation par le shell. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2453.2 Respect de la syntaxe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2453.3 Valeurs nulles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246

15Table des matières

4. Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2484.1 Exercice 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2484.2 Exercice 2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249

Chapitre 12awk, la commande de traitement de fichiers

1. Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251

2. Principe de fonctionnement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2522.1 Principe général. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2522.2 Expression de sélection. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2532.3 Séparateur de champs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2542.4 Éléments de syntaxe du langage . . . . . . . . . . . . . . . . . . . . . . . . 255

2.4.1 Généralités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2552.4.2 Instructions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2562.4.3 Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2562.4.4 Tableaux associatifs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2572.4.5 Fonctions définies par l'utilisateur . . . . . . . . . . . . . . . . . 2572.4.6 Fonctions intégrées au langage . . . . . . . . . . . . . . . . . . . . 2582.4.7 Opérations arithmétiques . . . . . . . . . . . . . . . . . . . . . . . . 2582.4.8 Tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2582.4.9 Contrôle de boucles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259

3. Les expressions régulières . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2593.1 Utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2593.2 Recherche de correspondance . . . . . . . . . . . . . . . . . . . . . . . . . . 260

3.2.1 Recherche avec /.../. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2603.2.2 Recherche avec ~ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2603.2.3 Recherche avec !~ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261

3.3 Utilisation du caractère ^ . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2613.4 Utilisation du caractère $ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2623.5 Utilisation du caractère . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2623.6 Utilisation des caractères [ ] . . . . . . . . . . . . . . . . . . . . . . . . . . . 2623.7 Utilisation du caractère * . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263

16Syntaxe et mise en œuvre (avec exercices et corrigés)

Expressions régulières

3.8 Recherche d'un mot entier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263

4. Fonctions de manipulation de chaînes . . . . . . . . . . . . . . . . . . . . . . . 2644.1 Fonction length() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2644.2 Fonction sub(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2644.3 Fonction gsub(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2654.4 Fonction match() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266

5. Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2665.1 Exercice 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2665.2 Exercice 2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2715.3 Exercice 3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2745.4 Exercice 4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2775.5 Exercice 5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278

Chapitre 13du, l’affichage de l'usage des disques

1. Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281

2. Principe de fonctionnement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2822.1 Généralités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2822.2 Options relatives aux expressions génériques . . . . . . . . . . . . . 282

2.2.1 Option -X, ou --exclude-from=FICHIER . . . . . . . . . . . . 2822.2.2 Option --exclude=MODELE . . . . . . . . . . . . . . . . . . . . . . 282

Chapitre 14lex, le générateur d'analyseurs lexicaux

1. Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285

2. Principe de fonctionnement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2872.1 Généralités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2872.2 Structure d'un programme lex . . . . . . . . . . . . . . . . . . . . . . . . . . 287

2.2.1 Première section . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2882.2.2 Deuxième section . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2892.2.3 Troisième section . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289

17Table des matières

2.3 Génération du binaire. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291

3. Les expressions régulières . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2923.1 Localisation des expressions régulières . . . . . . . . . . . . . . . . . . . 2923.2 Utilisation du caractère " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2933.3 Utilisation du caractère \ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2933.4 Utilisation des caractères et . . . . . . . . . . . . . . . . . . . . . . . . . . . 2943.5 Utilisation du caractère . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2953.6 Utilisation des caractères [ ]. . . . . . . . . . . . . . . . . . . . . . . . . . . . 2953.7 Utilisation du caractère ^ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2963.8 Utilisation des caractères ( ). . . . . . . . . . . . . . . . . . . . . . . . . . . . 2963.9 Utilisation du caractère * . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2973.10 Utilisation du caractère + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2973.11 Utilisation du caractère ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2983.12 Utilisation des caractères { } . . . . . . . . . . . . . . . . . . . . . . . . . . . 2993.13 Utilisation du caractère | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300

4. Les règles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3004.1 Localisation des règles de traitement. . . . . . . . . . . . . . . . . . . . . 3004.2 Utilisation du caractère ^ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3014.3 Utilisation du caractère $ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3014.4 Utilisation du caractère / . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302

5. Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3035.1 Exercice 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3035.2 Exercice 2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3045.3 Exercice 3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3055.4 Exercice 4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3065.5 Exercice 5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3075.6 Exercice 6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3075.7 Exercice 7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3095.8 Exercice 8. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3105.9 Exercice 9. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3125.10 Exercice 10. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3125.11 Exercice 11. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314

18Syntaxe et mise en œuvre (avec exercices et corrigés)

Expressions régulières

Chapitre 15glob(), la fonction de sélection de pathnames

1. Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317

2. Principe de fonctionnement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3172.1 Généralités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3172.2 Utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318

3. Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3223.1 Exercice 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3223.2 Exercice 2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323

Chapitre 16regcomp(), regexec(), la gestion des ER

1. Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329

2. Rappel du principe de fonctionnement. . . . . . . . . . . . . . . . . . . . . . . 3302.1 Généralités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3302.2 Utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3302.3 Utilisation de regcomp() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3312.4 Utilisation de regexec() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333

3. Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3353.1 Exercice 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3353.2 Exercice 2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3383.3 Exercice 3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342

Chapitre 17hl, une commande de colorisation

1. Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349

2. Principe de fonctionnement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350

3. Description des options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3513.1 Usage de la commande. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351

19Table des matières

3.2 Options de couleurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3523.3 Option -h. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3533.4 Option -v. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3533.5 Option -u. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3533.6 Option -e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3533.7 Option -i . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3533.8 Option -E. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3533.9 Option -d. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3543.10 Option -D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355

4. Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3554.1 Exercice 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3554.2 Exercice 2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3564.3 Exercice 3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3574.4 Exercice 4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3574.5 Exercice 5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3584.6 Exercice 6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3594.7 Exercice 7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3594.8 Exercice 8. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3604.9 Exercice 9. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363

Chapitre 18Les expressions régulières en Python

1. Généralités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365

2. Le module de gestion des expressions régulières. . . . . . . . . . . . . . . . 3662.1 Utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3662.2 Méthode re.compile() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3682.3 Méthode re.search() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3692.4 Méthode re.match() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3692.5 Méthode re.sub() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371

3. Les expressions régulières . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3713.1 Utilisation du caractère . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3713.2 Utilisation du caractère \ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372

20Syntaxe et mise en œuvre (avec exercices et corrigés)

Expressions régulières

3.3 Utilisation des caractères [ ] . . . . . . . . . . . . . . . . . . . . . . . . . . . 3733.4 Utilisation du caractère * . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3733.5 Utilisation des caractères *? . . . . . . . . . . . . . . . . . . . . . . . . . . . 3733.6 Utilisation du caractère + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3733.7 Utilisation des caractères +? . . . . . . . . . . . . . . . . . . . . . . . . . . 3733.8 Utilisation du caractère ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3743.9 Utilisation des caractères ( ) . . . . . . . . . . . . . . . . . . . . . . . . . . . 3743.10 Utilisation des caractères (?iLmsux) . . . . . . . . . . . . . . . . . . . . 3743.11 Utilisation des caractères (?:...) . . . . . . . . . . . . . . . . . . . . . . . . . 3743.12 Utilisation des caractères (?P<name>...) . . . . . . . . . . . . . . . . 3753.13 Utilisation des caractères (?P=name) . . . . . . . . . . . . . . . . . . . 3753.14 Utilisation des caractères (?#...) . . . . . . . . . . . . . . . . . . . . . . . . 3753.15 Utilisation des caractères (?=...) . . . . . . . . . . . . . . . . . . . . . . . . 3753.16 Utilisation des caractères (?!...) . . . . . . . . . . . . . . . . . . . . . . . . . 3753.17 Utilisation des caractères (?<=...) . . . . . . . . . . . . . . . . . . . . . . 3763.18 Utilisation des caractères (?<!...) . . . . . . . . . . . . . . . . . . . . . . . 3763.19 Utilisation des caractères { } . . . . . . . . . . . . . . . . . . . . . . . . . . 3763.20 Utilisation du caractère | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3773.21 Utilisation du caractère ^ . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3773.22 Utilisation du caractère $ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377

Chapitre 19Les expressions régulières en Perl

1. Généralités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379

2. Intégration des expressions régulières au langage . . . . . . . . . . . . . . 3802.1 Généralités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3802.2 Avertissement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3802.3 Recherche de chaînes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3802.4 Substitution de chaînes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 382

3. Les expressions régulières . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3843.1 Utilisation du caractère . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3843.2 Utilisation du caractère \ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384

21Table des matières

3.3 Utilisation des caractères [ ] . . . . . . . . . . . . . . . . . . . . . . . . . . . 3853.4 Utilisation du caractère * . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3863.5 Utilisation des caractères *? . . . . . . . . . . . . . . . . . . . . . . . . . . . 3863.6 Utilisation du caractère + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3863.7 Utilisation des caractères +? . . . . . . . . . . . . . . . . . . . . . . . . . . 3863.8 Utilisation du caractère ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3863.9 Utilisation des caractères ?? . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3873.10 Utilisation des caractères ( ). . . . . . . . . . . . . . . . . . . . . . . . . . . . 3873.11 Utilisation des caractères (?imsx-imsx) . . . . . . . . . . . . . . . . . . 3873.12 Utilisation des caractères (?imsx-imsx:...) . . . . . . . . . . . . . . . . 3873.13 Utilisation des caractères (?:...) . . . . . . . . . . . . . . . . . . . . . . . . . 3873.14 Utilisation des caractères (?#...) . . . . . . . . . . . . . . . . . . . . . . . . 3883.15 Utilisation des caractères (?=...) . . . . . . . . . . . . . . . . . . . . . . . . 3883.16 Utilisation des caractères (?!...) . . . . . . . . . . . . . . . . . . . . . . . . . 3883.17 Utilisation des caractères (?<=...) . . . . . . . . . . . . . . . . . . . . . . 3883.18 Utilisation des caractères (?<!...) . . . . . . . . . . . . . . . . . . . . . . . 3883.19 Utilisation des caractères (?>...) . . . . . . . . . . . . . . . . . . . . . . . . 3893.20 Utilisation des caractères (?{...}) . . . . . . . . . . . . . . . . . . . . . . . 3893.21 Utilisation des caractères {n} . . . . . . . . . . . . . . . . . . . . . . . . . . 3893.22 Utilisation des caractères {n,} . . . . . . . . . . . . . . . . . . . . . . . . . 3893.23 Utilisation des caractères {n,p} . . . . . . . . . . . . . . . . . . . . . . . . 3893.24 Utilisation des caractères {n,}? . . . . . . . . . . . . . . . . . . . . . . . . 3893.25 Utilisation des caractères {n,p}? . . . . . . . . . . . . . . . . . . . . . . . 3903.26 Utilisation du caractère | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3903.27 Utilisation du caractère ^ . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3903.28 Utilisation du caractère $ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390

4. Les classes de caractères . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390

5. Exemple de programme de recherche de correspondance . . . . . . . . 391

6. Exemple de programme de substitution . . . . . . . . . . . . . . . . . . . . . . 392

22Syntaxe et mise en œuvre (avec exercices et corrigés)

Expressions régulières

Chapitre 20Les expressions régulières en JavaScript

1. Généralités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393

2. Utilisation des expressions régulières . . . . . . . . . . . . . . . . . . . . . . . . 393

3. Les expressions régulières . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3943.1 Utilisation du caractère . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3943.2 Utilisation du caractère \ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3943.3 Utilisation des caractères [ ] . . . . . . . . . . . . . . . . . . . . . . . . . . . 3953.4 Utilisation du caractère * . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3963.5 Utilisation du caractère + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3963.6 Utilisation du caractère ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3963.7 Utilisation des caractères ( ) . . . . . . . . . . . . . . . . . . . . . . . . . . . 3963.8 Utilisation des caractères (?:...) . . . . . . . . . . . . . . . . . . . . . . . . . 3973.9 Utilisation des caractères (?=...) . . . . . . . . . . . . . . . . . . . . . . . . 3973.10 Utilisation des caractères (?!...) . . . . . . . . . . . . . . . . . . . . . . . . . 3973.11 Utilisation des caractères {n} . . . . . . . . . . . . . . . . . . . . . . . . . . 3973.12 Utilisation des caractères {n,} . . . . . . . . . . . . . . . . . . . . . . . . . . 3973.13 Utilisation des caractères {n,p} . . . . . . . . . . . . . . . . . . . . . . . . 3983.14 Utilisation du caractère | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3983.15 Utilisation du caractère ^ . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3983.16 Utilisation du caractère $ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398

Chapitre 21Synthèse des types d’expression

1. Les expressions de sélection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3991.1 Quels programmes les utilisent ?. . . . . . . . . . . . . . . . . . . . . . . . 3991.2 Les métacaractères . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4001.3 Les quantificateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400

2. Les expressions régulières basiques . . . . . . . . . . . . . . . . . . . . . . . . . . 4002.1 Quels programmes les utilisent ?. . . . . . . . . . . . . . . . . . . . . . . . 4002.2 Les métacaractères . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401

23Table des matières

2.3 Les quantificateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4012.4 Les classes de caractères . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401

3. Les expressions régulières étendues . . . . . . . . . . . . . . . . . . . . . . . . . . 4023.1 Quels programmes les utilisent ?. . . . . . . . . . . . . . . . . . . . . . . . 4023.2 Les métacaractères . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4023.3 Les quantificateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4033.4 Les classes de caractères . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403

4. Les expressions régulières de find . . . . . . . . . . . . . . . . . . . . . . . . . . . 4034.1 Généralités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4034.2 les différentes interprétations des expressions régulières. . . . . 404

4.2.1 emacs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4044.2.2 posix-awk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4054.2.3 posix-basic. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4064.2.4 posix-egrep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4074.2.5 posix-extended . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 408

Chapitre 22Les classes de caractères POSIX

1. Généralités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409

2. Les classes POSIX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4102.1 [:alpha:] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4102.2 [:lower:] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4102.3 [:upper:]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4102.4 [:alnum:] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4112.5 [:digit:] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4112.6 [:xdigit:] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4112.7 [:space:] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4112.8 [:blank:] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4112.9 [:punct:] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4122.10 [:print:] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4122.11 [:graph:] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4122.12 [:cntrl:] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412

24Syntaxe et mise en œuvre (avec exercices et corrigés)

Expressions régulières

Chapitre 23Équivalences d'expressions régulières

1. Véritables équivalences d'expressions . . . . . . . . . . . . . . . . . . . . . . . . 413

2. Fausses équivalences. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414

3. Conseils . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414

Chapitre 24Outils de validation d'expressions régulières

1. Besoin de mise au point . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415

2. Validation des informations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4152.1 Validation des données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4152.2 Validation des expressions régulières avant utilisation . . . . . . 416

3. Méthodes de validation des expressions . . . . . . . . . . . . . . . . . . . . . . 4173.1 Détermination du type d'expression régulière . . . . . . . . . . . . . 4173.2 Validation d'une expression de filtrage . . . . . . . . . . . . . . . . . . . 4183.3 Validation d'une expression régulière basique . . . . . . . . . . . . . 4183.4 Validation d'une expression régulière étendue . . . . . . . . . . . . . 420

4. Règles de bonnes pratiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421

Chapitre 25Quelques exercices récapitulatifs

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423

2. shell, sed, awk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4232.1 Détermination du jour de la semaine d'une date donnée . . . . 423

3. find, egrep, hl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4283.1 Colorisation d'un répertoire de niveau donné. . . . . . . . . . . . . . 428

25Table des matières

Annexes

1. Gestion des caractères français sous Linux . . . . . . . . . . . . . . . . . . . . 4311.1 Installation du paquet d’internationalisation. . . . . . . . . . . . . . 4311.2 Exemple d’installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4311.3 Exemple de configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4321.4 Choix du jeu de caractères . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 432

2. Sources de la commande args. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4322.1 Fichier args.c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 432

3. Sources de la commande hl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4333.1 Fichier cr_cpri.h . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4333.2 Fichier cr_epri.h . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4363.3 Fichier cr_gpri.c. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4373.4 Fichier cr_main.c. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4383.5 Fichier makefile. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447

Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 449

393

Chapitre 20

Les expressions régulièresen JavaScript

Les expressions régulières en JavaScript

1. Généralités

JavaScript est un langage orienté vers le développement web. Il a été créé parBrendan Eich en 1995, et utilisé pour la première fois dans le navigateur webNetscape Navigator.

Il est fréquemment utilisé en tant que complément à HTML, qui est essentiel-lement un langage de description de pages web, afin de lui ajouter desfonctionnalités de langage de programmation que HTML ne possède pas.

Bien qu'il puisse être utilisé ailleurs, il est principalement attaché à l'écriturede pages web, et reste majoritairement localisé du côté du client web.

2. Utilisation des expressions régulières

JavaScript est capable de manipuler des expressions régulières étendues. Deuxméthodes permettent de les utiliser, l'une utilisant une syntaxe littérale :

var var_expreg = /expression/modificateurs;

l'autre faisant appel à une méthode de construction de l'expression régulière :

var var_expreg = new RegExp(expression);

© E

dit

ions

EN

I -

All r

ights

rese

rved

394Syntaxe et mise en œuvre (avec exercices et corrigés)

Expressions régulières

Ces deux syntaxes sont fonctionnellement équivalentes du point de vue durésultat, mais diffèrent sur les points suivants :

– la première utilise une expression constante, qui est compilée au charge-ment du script,

– la deuxième fait appel à un constructeur pouvant utiliser une expression va-riable, et l'expression est compilée lors de l'exécution du script. Cette mé-thode est moins performante mais présente l'avantage de pouvoir utiliserune expression régulière qui varie en fonction de certaines conditions.

Les méthodes manipulant les expressions régulières sont les suivantes :

– exec()

– test()

– match()

– search()

– replace()

3. Les expressions régulières

3.1 Utilisation du caractère .

Le caractère . désigne un caractère quelconque, à l'exception du saut de ligne(newline).

3.2 Utilisation du caractère \

Le caractère antislash sert à supprimer la signification particulière d'un méta-caractère, ou à définir un caractère spécial. Les caractères spéciaux définis àl'aide de l'antislash sont les suivants :

\0 correspond au caractère ASCII nul.

\n correspond à la n-ième chaîne sélectionnée avec des parenthèses.

395Les expressions régulières en JavaScriptChapitre 20

3.3 Utilisation des caractères [ ]

Les caractères [ et ] servent à désigner un caractère quelconque parmi unensemble spécifié sous forme d'énumération, sous forme de plage contiguë, ouencore sous toute combinaison de ces deux possibilités. Le caractère ̂ permetd'inverser la sélection.

\b correspond à la chaîne vide, en début ou fin de mot.

\B correspond à la chaîne vide, uniquement si elle n'est ni en début,ni en fin de mot.

\d correspond à un chiffre décimal, ou, si UNICODE est spécifié,correspond à ce qui est spécifié en tant que chiffre dans la baseUnicode.

\D correspond à tout sauf un chiffre décimal, ou, si UNICODE estspécifié, correspond à tout sauf ce qui est spécifié en tant quechiffre dans la base Unicode.

\f correspond au caractère de saut de page (form feed).

\ooo correspond à la valeur octale de ooo.

\r correspond au retour chariot (carriage return).

\s correspond à un caractère espace, \t, \n, \r, \f, \v.

\S correspond à tout sauf les caractères espace, \t, \n, \r, \f, \v.

\t correspond à une tabulation.

\v tabulation verticale.

\w correspond à un caractère alphanumérique et au caractère souli-gné.

\W ne correspond ni à un caractère alphanumérique, ni au caractèresouligné.

\xxx correspond à la valeur hexadécimale exprimée par xx.

\uxxxx correspond au caractère Unicode dont la valeur hexadécimale estexprimée par xxxx.

© E

dit

ions

EN

I -

All r

ights

rese

rved

396Syntaxe et mise en œuvre (avec exercices et corrigés)

Expressions régulières

Remarque

À l'intérieur des crochets, les caractères spéciaux perdent leur signification.

3.4 Utilisation du caractère *

Le caractère * dans une expression est un facteur de répétition qui s'appliqueau caractère ou à l'expression qui le précède. Il indique que le caractère oul'expression peut figurer N fois dans la chaîne, N étant positif ou nul.

La plus longue correspondance est sélectionnée.

3.5 Utilisation du caractère +

Le caractère + dans une expression est un facteur de répétition qui s'appliqueau caractère ou à l'expression qui le précède. Il indique que le caractère oul'expression peut figurer N fois dans la chaîne, N étant strictement positif.

La plus longue correspondance est sélectionnée.

3.6 Utilisation du caractère ?

Le caractère ? sert à indiquer que le caractère ou l'expression qui le précède estoptionnel, c'est-à-dire qu'il peut être présent ou absent.

3.7 Utilisation des caractères ( )

Les parenthèses servent à grouper des expressions et à mémoriser (capturer)une sous-chaîne.

397Les expressions régulières en JavaScriptChapitre 20

3.8 Utilisation des caractères (?:...)

Cette notation a la même signification que les parenthèses, mais ne mémorisepas l'expression correspondante. Il n'est donc pas possible de la référencerultérieurement dans l'expression.

3.9 Utilisation des caractères (?=...)

Cette notation est une référence avant, ce qui signifie que l'expression corres-pondra si l'expression et le contenu des parenthèses correspond à la chaînetraitée, mais la chaîne entre parenthèses ne sera pas consommée.

3.10 Utilisation des caractères (?!...)

Cette notation est une référence avant négative, ce qui signifie que l'expressioncorrespondra si l'expression précédente correspond mais que le contenu desparenthèses ne correspond pas à la chaîne traitée. La chaîne entre parenthèsesne sera pas consommée.

3.11 Utilisation des caractères {n}

La séquence {n} sert à indiquer que le caractère ou l'expression qui précèdedoit figurer exactement n fois.

3.12 Utilisation des caractères {n,}

La séquence {n,} sert à indiquer que le caractère ou l'expression qui précèdedoit figurer au moins n fois. La chaîne la plus longue sera utilisée.

© E

dit

ions

EN

I -

All r

ights

rese

rved

398Syntaxe et mise en œuvre (avec exercices et corrigés)

Expressions régulières

3.13 Utilisation des caractères {n,p}

La séquence {n,p} sert à indiquer que le caractère ou l'expression qui précèdedoit figurer au moins n fois, et au plus p fois. La chaîne la plus longue sera uti-lisée.

3.14 Utilisation du caractère |

Le caractère | est équivalent à un OU logique (booléen). Il sert à exprimerqu'une chaîne peut correspondre à une expression ou à une autre.

3.15 Utilisation du caractère ^

Le caractère ^ correspond au début de la chaîne, et parfois également àl'emplacement immédiatement après un saut de ligne (modificateur s).

3.16 Utilisation du caractère $

Le caractère $ correspond à la fin de la chaîne, et parfois à l'emplacement im-médiatement avant un saut de ligne (modificateur s).