Blog ENI : Toute la veille numérique !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
💥 Les 22 & 23 novembre : Accès 100% GRATUIT
à la Bibliothèque Numérique ENI. Je m'inscris !
  1. Livres et vidéos
  2. Expressions régulières
  3. Synthèse des types d’expressions
Extrait - Expressions régulières Syntaxe et mise en œuvre (avec exercices et corrigés) (2e édition)
Extraits du livre
Expressions régulières Syntaxe et mise en œuvre (avec exercices et corrigés) (2e édition) Revenir à la page d'achat du livre

Synthèse des types d’expressions

Les expressions de sélection

Avertissement

Étant donnée la diversité des types d’expressions régulières existant (BRE, ERE, POSIX 1003.1, POSIX 1003.2, PCRE, PCRE2, RE2, ECMAScript, Java, .NET, Rust, C++, vim, awk, grep, ...) il ne sera pas possible de les décrire tous dans ce chapitre. Nous nous limiterons ici à quelques-uns parmi les plus répandus. Les lecteurs curieux pourront trouver les spécificités (généralement minimes, sauf pour PCRE2) des types les intéressant sur les sites de référence associés aux outils ou langages qui les utilisent.

1. Quels programmes les utilisent ?

Les expressions de sélection (ou de filtrage, ou modèles) permettent la sélection de noms de fichiers (ou de noms de configurations dans le cas de hl). Elles sont principalement utilisées par les shells et certaines fonctions :

  • sh

  • csh

  • ksh

  • tcsh

  • bash

  • zsh

  • find (options -name, -iname, -lname, -ilname, -path, -ipath)

  • hl (avec option -p)

  • glob()

  • fnmatch()

  • etc.

2. Les métacaractères

Les métacaractères utilisés sont les suivants :

  • ?

  • [ ]

  • *

3. Les quantificateurs

Il n’y a pas de quantificateur permettant d’indiquer la répétition d’un caractère dans les expressions de sélection.

Le caractère * désigne une chaîne quelconque de longueur éventuellement...

Les expressions régulières basiques

1. Quels programmes les utilisent ?

Les expressions régulières basiques sont les expressions que l’on trouve dans les commandes et fonctions suivantes :

  • ed

  • ex

  • expr

  • grep (sans option -E)

  • find (options -regextype posix-basic -regex)

  • awk

  • vi (par défaut, ou avec option nofullre quand elle existe)

  • vim

  • regcomp() / regexec() (sans le flag REG_EXTENDED)

  • hl (sans l’option -e)

  • etc.

2. Les métacaractères

Les métacaractères utilisés sont les suivants :

  • .

  • *

  • [ ]

  • \<  \>

  • ^

  • $

  • \

  • ( ) (pour la sélection par ed ou ex par exemple)

3. Les quantificateurs

Seul le caractère * peut être utilisé comme caractère indiquant la répétition. Il représente un facteur multiplicateur supérieur ou égal à 0.

4. Les classes de caractères

Les classes de caractères sont désignées par la syntaxe [[:classe:]]. Les classes de caractères sont détaillées dans le chapitre intitulé Les classes de caractères POSIX. Elles ne sont pas toujours supportées.

Les expressions régulières étendues

1. Quels programmes les utilisent ?

Les expressions régulières étendues sont les expressions que l’on trouve dans les commandes et fonctions suivantes :

  • grep -E, egrep

  • sed -r

  • find (options -regextype emacs, -regextype posix-awk, -regextype posix-grep, -regextype posix-extended, avec option -regex)

  • lex

  • vi (avec option fullre quand elle existe)

  • vim

  • hl (avec option -e)

  • regcomp() / regexec() (avec le flag REG_EXTENDED)

  • le langage Python

  • le langage Perl

  • etc.

2. Les métacaractères

Les métacaractères utilisés sont les suivants :

  • .

  • [ ]

  • *

  • +

  • ?

  • { }

  • \<  \>

  • ^

  • $

  • \

  • ( )

  • |

3. Les quantificateurs

Les quantificateurs servent à d’indiquer le nombre d’occurrences d’une expression :

  • * : 0 à N fois (N étant strictement positif),

  • + : 1 à N fois (N étant strictement positif),

  • ? : 0 ou 1 fois,

  • {min,max}: min à max fois.

4. Les classes de caractères

Les classes de caractères sont désignées par la syntaxe [[:classe:]]. Les classes de caractères sont détaillées dans le chapitre intitulé Les classes de caractères POSIX. Elles ne sont pas toujours supportées.

Les expressions régulières de find

1. Généralités

L’option --regex de la commande find permet de comparer les noms longs des fichiers, trouvés lors du parcours des arborescences, à des expressions régulières. Le type de ces dernières peut être spécifié grâce à l’option --regextype. Les différents types implémentés présentent quelques différences qu’il est souhaitable de connaître pour éviter de commettre des erreurs.

Les différentes interprétations des métacaractères et expressions régulières sont définies dans la documentation des utilitaires de find sur le site http://www.gnu.org/.

Elles sont résumées dans les sections suivantes sous forme de tableaux pour une meilleure lisibilité.

Dans tous les cas, l’expression la plus longue est considérée.

2. Les différentes interprétations des expressions régulières

a. emacs

.

tout sauf un saut de ligne (\n).

*

zéro, une ou plusieurs fois ce qui précède, sauf en début d’expression ou après \( ou \|.

+

une ou plusieurs fois ce qui précède, sauf en début d’expression ou après \( ou \|.

?

zéro ou une fois ce qui précède, sauf en début d’expression ou après \( ou \|.

\+

+

\?

?

[ ... ]

définition de plages de caractères ; les plages inversées sont ignorées ; \ sans signification ; classes POSIX non reconnues.

\w

caractère dans un mot.

\W

caractère qui n’est pas dans un mot.

\<

début de mot.

\>

fin de mot.

\b

délimiteur de mot.

\B

tout sauf un délimiteur de mot.

\`

début des données.

\’

fin des données.

\( ... \)

groupement d’expressions ; gestion des références arrières avec \ii est entier.

\|

OU logique.

^

début de chaîne en début d’expression, ou après \(, ou après \|.

$

fin de chaîne en fin d’expression.

b. posix-basic

L’interprétation des expressions est identique à l’interprétation de l’éditeur ed.

.

tout sauf un saut de ligne (\n).

*

zéro, une ou plusieurs fois ce qui précède...

Les expressions régulières en Java

Les expressions données ci-après sont telles que spécifiées sur le site officiel de Java (https://docs.oracle.com). Elles sont proches des expressions de type PCRE, mais comportent de nouvelles syntaxes qui apportent parfois de la complexité et peuvent rendre le portage vers un autre langage quelque peu difficile. Autant que possible, il est conseillé d’éviter les syntaxes non-standard.

Caractères

x

Le caractère x

\\

Le caractère antislash (backslash)

\0n

Le caractère de valeur octale 0n (0 <= n <= 7)

\0nn

Le caractère de valeur octale 0nn (0 <= n <= 7)

\0mnn

Le caractère de valeur octale 0mnn (0 <= m <= 3, 0 <= n <= 7)

\xhh

Le caractère de valeur hexadécimale 0xhh

\uhhhh

Le caractère de valeur hexadécimale 0xhhhh

\x{h...h}

Le caractère de valeur hexadécimale 0xh...h (Character.MIN_CODE_POINT <= 0xh...h <=   Character.MAX_CODE_POINT)

\t

Le caractère tabulation horizontale (’\u0009’)

\n

Le caractère saut de ligne (newline / line feed) (’\u000A’)

\r

Le caractère retour chariot (carriage-return) (’\u000D’)

\f

Le caractère saut de page (form-feed) (’\u000C’)

\a

Le caractère d’alerte (bell) (’\u0007’)

\e

Le caractère d’échappement (escape) (’\u001B’)

\cx

Le caractère de contrôle Ctrl-x

Classes de caractères

[abc]

a, b, or c (classe simple)

[^abc]

Un caractère autre que a, b, ou c (négation)

[a-zA-Z]

Un caractère de la plage de a à z ou de A à Z, bornes comprises (range)

[a-d[m-p]]

Un caractère de la plage de a à d, ou de m à p, équivalent à la syntaxe [a-dm-p] (union)

[a-z&&[def]]

Un caractère parmi d, e, ou f (intersection)

[a-z&&[^bc]]

Un caractère de la plage de a à z, sauf b et c, équivalent à la syntaxe [ad-z] (soustraction)

[a-z&&[^m-p]]

Un caractère de la plage de a à z, mais pas de la plage de m à p, équivalent à la syntaxe [a-lq-z](soustraction)

Classes de caractères prédéfinies

.

N’importe quel caractère (peut correspondre ou non à un terminateur de ligne)

\d

Un chiffre...