À propos des expressions régulières

1. Que sont les expressions régulières ?

Les expressions régulières, ou regex, sont des séquences de caractères représentant un ensemble de chaînes de caractères possibles. Elles sont utilisées en informatique, principalement par les programmeurs, mais peuvent aussi se révéler très utiles dans des logiciels de traitement de texte pour retrouver une séquence précise, dans le cadre d'un rechercher/remplacer par exemple.

Quelques exemples :

  1. « lettre » désigne un ensemble de chaînes de caractères se limitant à la chaîne « lettre ».
  2. « lettres? » désigne un ensemble de 2 chaînes : « lettre » et « lettres ».
  3. « (l|m)ettre » désigne un ensemble de 2 chaînes : « lettre » et « mettre ».
  4. « dés.+ » désigne un ensemble infini de chaînes commençant par « dés » et comportant au moins un caractère supplémentaire.

2. Les expressions régulières sur le site LAFABREV

Le moteur de recherche du site permet d'utiliser les expressions régulières. Pour cela, il faut faire précéder sa requête de « regexp » (par exemple : « regexp France »). Si une expression régulière est mal formulée, l'utilisateur sera redirigé vers la page d'erreur.

Avec ou sans expression régulière, la requête saisie est recherchée dans le code XML des retranscriptions. Il est donc possible de s'appuyer sur le balisage pour affiner ses recherches, à condition de connaître la DTD qui les régit ainsi que les principes de base des regex.

Voici quelques cas de figure où les expressions régulières peuvent s'avérer utiles (les séquences en gris sont des variables). Il existe souvent plusieurs moyens de formuler une recherche en expression régulière.

Remarque : certains caractères sont réservés par la syntaxe regex (cf. section 3 pour plus d'informations).

Rechercher une expression exacte 

Patron :

  • regexp expression

Exemple :

  • regexp Albert de Saxe-Teschen

Explication :

  • Nous recherchons tous les papiers contenant la chaîne en question. Une recherche simple sans expression régulière retournerait tous les papiers où figurent indépendamment « Albert », « de » et « Saxe-Teschen ».

Rechercher une valeur d'attribut XML

Patron :

  • regexp nom_d_attribut='expression'

Exemple :

  • regexp type='lieu_histoire'

Explication :

  • Les valeurs d'attributs XML sont des formes normalisées de ce qui figure sur le papier. Il est souvent utile de s'y reférer dans une recherche.

Rechercher une forme normalisée possédant un homonyme dans l'index

Patron :

  • regexp nom_de_balise[^<>]+'expression'

Exemple :

  • regexp reference_bibliographique[^<>]+'Grégoire'

Explication :

  • Une forme normalisée d'un index peut avoir un homonyme dans un autre index. Il est possible de les différencier en précisant le nom de la balise contenant l'attribut.

Rechercher au moins une valeur parmi un ensemble

Patron :

  • regexp (expression1|expression2|expression3)

Exemple :

  • regexp (Cambon|Cambon, Adélaïde|Cambon, Auguste|Cambon, César)
  • regexp Cambon(, Adélaïde|, Auguste|, César)?

Explication :

  • Recherche de tous les papiers contenant au moins une des valeurs saisies.

Rechercher deux valeurs cooccurrentes dans le même papier

Patron :

  • regexp expression1.*expression2|expression2.*expression1

Exemple :

  • regexp Robespierre.*Robespierre jeune|Robespierre jeune.*Robespierre

Explication :

  • Recherche de tous les papiers contenant chacune des deux valeurs.

3. Syntaxe

Les exemples donnés peuvent soulever des questions. Pourquoi, par exemple, le point d'interrogation dans l'exemple 2. de la section 1 ne désigne pas simplement un point d'interrogation ? Les expressions régulières mobilisent des caractères déjà existants pour indiquer certaines choses, par exemple pour encapsuler les ensembles pré-définis de caractères ou quantifier les répétitions possibles de certaines sous-séquences.

Voici un tableau résumant ces caractères spéciaux (les plus basiques) :

CaractèreSignificationExemple
.tout caractèrea. = « aa », « ab », « ac », « a1 », « a2 »…
|disjonctionlettre|mettre = « lettre » ou « mettre »
( )séquence indépendante(re|é)mettre = « remettre » ou « émettre »
[ ]ensemble de caractères[lm]ettre = « lettre » ou « mettre »
^début d'une chaîne^a = toute chaîne commençant par « a »
[^ ]exclusion[^a] = tout sauf « a »
$fin d'une chaînea$ = toute chaîne finissant par « a »
?0 ou 1 foisba? = « b », « ba »
*0, 1 ou plusieurs foisba* = « b », « ba », « baa », « baaaaaaaaaaaaa »…
+1 ou plusieurs foisba+ = « ba », « baa », « baaaaaaaaaaaaaaaaaaa »…
[-]de tel à tel caractère[a-z] = tout caractère non-accentué, de « a » à « z »

Il y en a plus, mais une fois ces caractères-ci assimilés, il devient déjà possible de manipuler les expressions régulières de façon efficace.

Ces caractères ayant déjà un rôle dans la syntaxe des regex, afin de les représenter en tant que tels, il faut les échapper en leur antéposant un antislash (« \ »). Cet antislash permet également de donner à certains autres caractères une valeur précise au sein de la syntaxe.

4. Syntaxe étendue

L'antislash permet donc d'échapper des caractères normaux afin de leur faire jouer un rôle précis. Voici un tableau résumant les principaux éléments concernés :

ÉlémentSignification
\nretour à la ligne
\ttabulation
\stout caractère d'espacement
\Stout sauf un caractère d'espacement
\wcaractère alphanumérique ou underscore (« _ »)
\Wtout sauf un caractère alphanumérique ou l'underscore (« _ »)
\dchiffre
\Dtout sauf un chiffre

5. En savoir plus

Les expressions régulières sont assez largement répandues, mais leur utilisation peut varier selon le langage de programmation ou la plateforme. Sur le site de LAFABREV, les expressions régulières sont restreintes à l'usage qu'en fait SQL, langage servant à agir sur un certain type de bases de données.

Page wikipédia sur les expressions régulières

Utilisation des expressions régulières avec SQL