Les regex : un gain de temps pour la gestion de contenu

Rédigé par : Sélim Dahmani
Guide et modèle gratuits : maîtriser les regex

GUIDE ET MODÈLE GRATUITS : MAÎTRISER LES REGEX

Utilisez les regex de façon optimale pour rechercher des informations ou bien automatiser certaines opérations.

Télécharger gratuitement
Regex

Mis à jour :

Publié :

Dans le monde informatique, pouvoir manipuler les données à volonté est un avantage considérable. Que ce soit pour rechercher des informations spécifiques, ou bien remplacer des données, les regex (de l'anglais regular expressions) permettent d'automatiser de nombreuses opérations.
Elles ont de nombreux domaines d'application et représentent un formidable gain de productivité pour celles et ceux qui en maîtrisent l'usage.

Téléchargement  >> Le guide et le modèle pour maîtriser les regex

Qu'est-ce qu'une regex ?

Les regex, ou expressions régulières, sont des modèles utilisés pour représenter des chaînes de caractères. Elles constituent un outil très puissant dans la manipulation du code et l'extraction d'information.

Si l'apprentissage de ces expressions régulières peut paraître difficile, il n'en est pas moins bénéfique. Les regex peuvent être utilisées aussi bien pour la validation de données ou le remplacement de chaînes de caractères, que pour le web scraping, c'est-à-dire l'extraction de contenu ou d'information d'un site web.

Une fois la syntaxe maîtrisée, les regex sont facilement compatibles avec de nombreux langages informatiques : JavaScript, PHP, Java, C#, Python ou Ruby. En effet, la logique de construction reste sensiblement la même.

 

Pourquoi utiliser les expressions régulières ?

Les expressions régulières sont associées à de nombreux cas d'application, ce qui en fait une compétence réutilisable et performante.

Dans le domaine du développement, le premier exemple généralement donné est celui de la sécurité. À l'aide d'une regex, il est possible de vérifier si le type de données reçues correspond au type de données attendues.

Dans le domaine du marketing, où leur connaissance fait souvent défaut, les regex permettent une utilisation optimale d'outils tels que la Search Console, Google Analytics, ou encore Looker Studio pour extraire des données à des fins de SEO.

Enfin, pour la gestion d'un blog, l'utilisation de regex permet la recherche rapide d'informations précises ou la modification générale du style d'un article, sans avoir à parcourir les lignes de codes une à une.

Reste à décortiquer les regex et voir comment les utiliser de façon optimale pour la recherche d'informations et pour la modification du contenu.

 

Syntaxe d'une regex

La regex est une chaîne de caractères représentant un modèle et qui sert à faire correspondre, gérer, et filtrer du texte.

Exemple de construction d'une regex :
/\d{5}/(une suite de 5 chiffres)

Ou encore :
/^((?!\.)[\w-_.]*[^.])(@\w+)(\.\w+(\.\w+)?[^.\W])$/
(une adresse e-mail)

L'une paraît, à première vue, plus complexe que l'autre, même si, pour les novices, aucune des deux n'est très compréhensible.

 

La structure de base d'une regex

Les ancres

Regex Explication
^La Correspond à toute chaîne commençant par La.
fin$ Correspond à toute chaîne terminant par fin.
^La fin$  Correspond à la chaîne exacte La fin, puisqu'elle commence et fini par La fin.
Bonjour

Correspond à toute chaîne contenant Bonjour.

Évidemment, pour cet exemple, une simple recherche textuelle permet d'obtenir le même résultat.

 \bBlog\b

Correspond à Blog en limite de mot, c'est-à-dire en tant que mot isolé (et non pas blogging, ni monblog.com).

Cette expression correspond aussi à Blog, précédé ou suivi de ponctuation :
Blog!
-Blog
&Blog?

Remarque : La limite de mot ne fonctionne pas sur un alphabet non latin.

 

 

 

Les quantificateurs

 

Regex Explication Correspondance
abc*    Correspond à toute chaîne avec ab, suivie de zéro ou plusieurs c. ab / abcc / abccccc / …
abc+ Correspond à toute chaîne avec ab, suivie de un ou plusieurs c. abc / abcc / abccccc / …
abc? Correspond à toute chaîne avec ab, suivie de zéro ou un seul c. ab / abc
abc{2}    Correspond à toute chaîne avec ab, suivie de deux (2) c. abcc
abc{2,} Correspond à toute chaîne avec ab, suivie de deux (2) c ou plus. abcc / abccccc / abccccccccc / …
abc{2,5} Correspond à toute chaîne avec ab, suivie de deux (2) à cinq (5) c. abcc / abccc / abccccc / abccccc
a(bc)*   Correspond à toute chaîne avec a, suivie de zéro ou plusieurs fois la séquence bc. a / abcbc / abcbcbcbc / …
a(bc){2,5} Correspond à toute chaîne avec a, suivie de deux (2) à cinq (5) fois la séquence bc. abcbc / abcbcbcbc / …

 

 

Les opérateurs

Regex Explication Correspondance
a(b|c)      Correspond à toute chaîne avec a, suivie de b ou de c et capturant b ou c.

ab / ac

a[bc]  Correspond à toute chaîne avec a, suivie de b ou c sans capturer b ou c. a dans abrégé / a dans accès

 

Les classes de caractères

Les classes de caractères permettent de définir un modèle à l'aide d'une seule lettre, ce qui produit des regex plus compréhensibles et plus courtes.

 

Regex Explication
 \d  Correspond à n'importe quel chiffre.
\w Correspond à n'importe quel mot (caractères alphanumériques).
 \s Correspond à n'importe quel espace blanc (tabulation et saut de ligne compris).
 \b Correspond au début ou à la fin d'un mot.
 \r  Correspond à un retour chariot.
 \n Correspond à une nouvelle ligne.
 abc(\r\n|\r|\n).*xyz Correspond à abc.*xyz, soit abc suivi de xyz, avec la possibilité que abc et xyz soient espacés de n'importe quelle suite de caractères, y compris d'un retour à la ligne.
 \D 

Correspond à un caractère quelconque n'étant pas un chiffre.

Remarque : Dans les classes de caractères, la majuscule d'une lettre correspond généralement à l'inverse de sa minuscule.

 . Le point correspond à tout caractère unique (lettre, chiffre ou symbole).

 

 

Les groupes

Les groupes sont très importants dans les regex utilisées pour des opérations de rechercher-remplacer, car ils permettent d'isoler des éléments de l'expression. On parle alors de groupes capturants.

Les groupes capturants ne peuvent pas faire l'objet d'un remplacement par regex.

En effet, (<h2.*?>).*?(</h2>) et <h2.*?>.*?</h2> obtiendront les mêmes résultats lors de la recherche, mais ils ne seront pas modifiables de la même manière. Dans le premier cas, seul le contenu de la balise h2 sera modifiable, tandis que dans le second cas, l'entièreté du résultat sera remplaçable.

symbole EXPLICATION
Parenthèse () Capture les caractères compris entre les parenthèses. Il est possible d'utiliser plusieurs groupes capturants : ils seront identifiés dans l'ordre de leur apparition.
Parenthèse négatives ( ?!foo) Recherche les éléments ne possédant pas foo dans leur chaîne de caractères.
Crochet [] Correspond à un ensemble de caractères, indépendamment de leur ordre ou de leur place dans la chaîne.
Tiret -  Utilisé entre les crochets, il indique une plage de caractères comme 0-9 ou A-Z.

 

 

Fonctionnement des groupes lors d'un remplacement

Dans une regex, les groupes capturants sont compris entre parenthèses. Ils ne sont pas modifiables et sont identifiables par leur place dans la regex.

(ab)(cd) est une regex constituée de 2 groupes capturants.

(Bonjour) les amis ( !) est une regex constituée de 2 groupes capturants.

((Hello), wyz [bc] (comment allez-vous ?)) est une regex constituée de 3 groupes capturants.

Pour appeler ces groupes, il suffit de mettre le signe dollar $ suivi du chiffre correspondant à leur ordre dans la regex.

(ab)(cd) dans une regex de recherche correspondra à $1$2 dans une regex de remplacement.

Astuce : Pour faciliter l'utilisation des groupes dans une regex, il est possible de copier une expression régulière sur le site Regex101, qui indiquera le nombre de groupes et leur correspondance.

 

Les opérations de rechercher-remplacer

Les regex permettent de rechercher dans le code toutes les informations souhaitées en vue de les remplacer.

 

Exemple simple

Pour rechercher et supprimer tous les attributs de style, et ainsi remettre à zéro le style du code, il est possible d'utiliser les regex pour rechercher l'attribut et la valeur conjointement et de tous les supprimer en même temps.

Cela évite d'effectuer une recherche simple qui renverra tous les mots correspondants à style, qu'il faudra ensuite parcourir un à un pour supprimer l'ensemble de l'attribut.

Dans un outil d'expressions régulières, il faudra rechercher tous les attributs de style dans le code :

style="([^"]*)"

Puis dans la case Remplacer par, il suffit de laisser le champ vide puis de Tout remplacer. Voilà, le code est maintenant vierge de style.

 

Exemple plus complexe

Pour modifier tous les textes des titres de niveau 2 :

(<h2.*?>).*?(</h2>)

Cette regex va rechercher dans le code toutes les balises h2 avec ou sans attributs ainsi que leur contenu.

Elle pourrait donc renvoyer comme résultat :

<h2>Cours Regex 101</h2>

<h2 class="text-white subtitle" id="sous-titre2">Cours Regex en HTML</h2>

Cette regex de recherche possède deux groupes capturants, (<h2.*?>) et (</h2>), respectivement $1 et $2.

Ces groupes ne seront donc pas modifiables, mais il est possible, si nécessaire, de ne pas les appeler dans la regex de remplacement.

Pour remplacer le contenu textuel des sous-titres, il faut appeler la balise ouvrante puis insérer le texte désiré, et appeler la balise fermante.

Cela donne :

$1 Mon nouveau titre $2

Remarque : Les espaces sont prises en compte dans la regex de remplacement.

 

Outils d'aide à la construction

De nombreux outils et sites web existent pour accompagner les utilisateurs, tous niveaux confondus, dans l'utilisation, le test et la validation des regex.

À noter que certains CMS ou éditeurs de texte ne permettent pas l'utilisation de regex sans l'installation des extensions nécessaires.

 

Pour utiliser les regex de recherche et de remplacement :


Certains CMS nécessitent le téléchargement d'un plug-in pour pouvoir gérer les regex, tandis que Notepad++ et VSCode intègrent cette fonctionnalité dès le départ.

Notepad++

La combinaison de touches CTRL+H ou le menu Rechercher > Remplacer.

VSCode

Le raccourci CTRL+F pour rechercher une donnée, puis un clic sur l'icône de cette zone de recherche pour transformer la recherche en regex et activer le remplacement.

 

Pour tester et apprendre :

  • L'application Expresso à télécharger.
  • L'application web Regex101 qui permet un accès rapide à un champ de test pour la regex.

 

Astuces et bonnes pratiques

1 - La combinaison point, étoile et point d'interrogation (.*?)

Cette partie de regex signifie que la recherche porte sur n'importe quelle donnée, du simple point aux balises les plus complexes.

<h1>.* ?</h1> Quelle que soit la structure du h1, complexe ou non, vide ou non, cette regex retrouvera tous les titres de premier niveau.

 

2 - Tester encore et encore

En fonction de la structure du code ou de la nature des données, il peut être intéressant de tester plusieurs fois une regex pour s'assurer d'avoir pris en compte toutes les possibilités.

Par exemple, dans le cadre de la gestion de données téléphoniques internationales : un numéro de téléphone français ne sera pas le même qu'un numéro de téléphone canadien. La regex ne sera donc pas la même, mais il est tout à fait possible de créer une regex prenant en compte tout type de numéro de téléphone.

 

3 - L'ordre de remplacement a son importance

Il est crucial d'anticiper l'ordre dans lequel appliquer des modifications par regex de remplacement. Comme pour l'astuce précédente, il est utile de tester la recherche avant de procéder au remplacement.

 

4 - Attention à la casse

Les regex sont sensibles à la casse. Ainsi, le résultat obtenu correspondra parfaitement à la regex recherchée, minuscules et majuscules comprises. La casse des caractères est donc fondamentale lors de la rédaction d'une expression régulière. Il est cependant possible d'ajouter /i à la regex, ce qui permet d'ignorer la casse.

 

5 - Anticiper les exceptions

En cherchant un élément précis à supprimer, par exemple les doublons \b(\w+)\b(?=.*\1), il peut être intéressant de prendre en compte toutes les éventualités.

Par exemple, « vous vous souvenez quand nous nous retrouvions… » sont des doublons intentionnels à conserver. Dans ce cas-là, il faudra sûrement parcourir chaque doublon ou alors intégrer dans la recherche des mots à traiter comme des exceptions, à l'aide de la regex négative ( ?!vous).

 

6 - Clarté et concision

[0-9] [0-9] [0-9] [0-9] [0-9] [0-9] [0-9] [0-9] [0-9] [0-9]

[0-9]{10}

\d{10}

Ces trois regex donnent le même résultat : elles sont toutes fonctionnelles, mais la plus courte est préférable car elle est plus lisible.

 

7 - Copier les regex

Il est utile de garder à portée de main les regex les plus souvent utilisées, simplement dans un bloc-notes, ou à la suite du mémento HubSpot sur les expressions régulières les plus utiles.

 

Les regex ne fonctionnent pas partout

La notion de saveur (flavor en anglais)

Il existe différentes saveurs, ou variantes de syntaxe, pour les expressions régulières.

Selon les normes POSIX, deux formes sont possibles : les expressions régulières de base ou étendues. Et chaque forme possède ses propres spécificités.

C'est pourquoi, une fois maîtrisées, les regex sont facilement applicables à la majorité des langages de programmation, à quelques exceptions près.

Outre les éléments de base, chaque moteur de regex prend en charge un type de syntaxe différent.

 

Les caractères génériques (wildcards en anglais)

Il ne faut pas confondre les regex et les caractères génériques.

Une expression régulière est un modèle utilisé pour représenter une chaîne de caractères.

Un caractère générique est un composant, utilisable dans une expression régulière, qui représente tout caractère, un peu comme un joker.

En termes informatiques, ce joker peut simplement être un astérisque * qui peut correspondre à un ou plusieurs caractères, ou un point d'interrogation ? correspondant à n'importe quel caractère unique.

Même si les regex peuvent inclure des caractères génériques, elles restent un comparateur de modèles beaucoup plus puissant : elles donnent la possibilité de restreindre le type de caractères, mais aussi de rester flexible sur le nombre de caractères.

 

Conclusion

Les nombreux exemples cités plus haut montrent que le champ d'application d'une expression régulière est vaste. La maîtrise de cette compétence est bénéfique dans diverses professions : développeur web, analyste de données ou blogueur occasionnel.

 

Voici quelques exemples de cas d'utilisation des regex :

  • Validation des données
  • Extraction de données (Data Scraping en anglais)
  • Analyse de chaînes de caractères
  • Remplacement de chaînes de caractères
  • Modification syntaxique
  • Conversion des données brutes (Data Wrangling en anglais)

 

Une connaissance approfondie des regex n'est pas indispensable pour en retirer des bénéfices : même une maîtrise des bases peut améliorer grandement la productivité dans de nombreux domaines d'activité.

 

Pour aller plus loin dans la gestion du code et des données, utilisez le modèle gratuit sur les expressions régulières les plus utiles et complétez-le avec vos propres regex, ou appliquez ces formules à votre site avec le logiciel CMS de HubSpot.

Nouveau call-to-action

Articles recommandés

Un gain de temps pour la gestion de contenu.