Expressions régulières (ou RegEx) : définition, cas d’usages et exemples

Pour toute personne normalement constituée, une expression régulière, regex ou RegEx est une suite de caractères semblant avoir été tapés au hasard sur son clavier par un développeur, dans l’unique but d’épater la galerie.

Et pourtant derrière leur apparence rebutante – nous devons bien l’avouer – se cache une puissance insoupçonnée. Dans cet article, nous allons vous fournir des exemples d’expressions régulières prêtes à l’usage dans vos outils préférés et vous exposer de façon simple leur fonctionnement.

Qu’est ce qu’une expression régulière ?

Une expression régulière (Regular Expression, souvent abrégée en regex ou RegEx et plus rarement expression rationnelle) décrit un motif, un pattern que nous souhaitons rechercher et localiser dans du texte (y compris des chiffres).

 

Pourquoi et dans quel cas utiliser une regex ?

Si vous n’êtes pas développeur, vous vous posez certainement la question de l’intérêt de continuer à lire cet article. Maïs le champ d’application des expressions régulières est plus vaste que les seuls langages de programmation.

En effet, la grande majorité des outils vous proposant de travailler sur du texte ou des chiffres vont vous proposer une fonctionnalité “avancée” vous permettant d’utiliser des expressions régulières. L’objectif est de filtrer, travailler ou de chercher/remplacer au sein de vos données en automatisant un traitement répétitif ou en réduisant le nombre d’étapes nécessaires. Voici quelques exemples :

  • Remplacer le contenu de multiples cellules d’un tableur (Excel, GSheets)
  • Créer un seul filtre GA pour filtrer 10 domaines (au lieu de 10 filtres…)
  • Ou mieux, pour filtrer les paramètres d’urls redondants, type cid…
  • Voire créer des objectifs atteignables sur de multiples pages
  • Repérer des adresses mails pro vs perso dans un fichier client de mauvaise qualité
  • Filtrer vos résultats dans Google Search Console sur toutes les URLs contenant le mot “produit” mais pas le mot “chaussures”
  • Réduire le nombre de règles htaccess à écrire lors d’un plan de redirection
  • Extraire tous les contenus des balises meta et Hn présentes dans le superbe scrap que vous venez de faire sur 12500 pages 
 

Quelques exemples d’expressions régulières

Pour construire l’expression régulière, nous allons combiner du texte classique (un mot, une marque…) avec des caractères spéciaux nous permettant de décrire certains comportements et motifs (patterns) : une répétition, une suite ou un groupe de caractères, un espace, la fin d’une ligne… Vous pouvez retrouver la définition de chacun de ces caractères spéciaux en fin d’article pour approfondir et apprendre à construire une regex.

WARNING : ces regex prêtes à l’emploi sont pensées pour être copiées-collées directement dans votre outil de choix. Cependant les implémentations des expressions régulières varient selon les outils et certaines regex peuvent ne pas fonctionner directement pour vous. N’hésitez pas à nous contacter pour obtenir de l’aide !

RegEx basiques

Je recherche tous les éléments commençant par Empirik 

^Empirik

Je recherche tous les éléments finissant par Google 

Google$

Je veux remplir toutes les cases vides de mon tableau avec des zéros

Chercher :

^$

Remplacer par :

0

Je recherche une variante avec et sans accent du mot activité, y compris les pluriels

activit.(?:.*)?

Je risque d’avoir aussi des fautes de frappe…👉

Alternativement, pour rechercher les noms finissant par ‘s’ ou ‘x’ (pour identifier des pluriels)

(s|x)$

Plus simple : regrouper pluriel et singulier

activités?$

Plus riche : trouver toutes les déclinaisons d’un verbe (1er groupe)

mang(é|e)(.*)

Fautes et corrections

Je recherche une faute de frappe sur le nom Empirik

Empiri(k|c|que)

Repère Empirik, Empiric et Empirique mais aussi Empiriks, Empirika… Pour s’arrêter aux trois variantes :

Empiri(k|c|que)$

Je recherche une faute de frappe sur le mot Gooooogle : (repère Google, Gooogle, Goooogle, etc.)

Goo+gle

Je recherche une faute de frappe encore plus drastique sur le mot Google : (repère Gogle et tous les exemples du point précédent)

Goo*gle

Alternativement : Go{2}gle ne reconnaît que Google exactement (2 o)

Go{2}gle

Go{1,3}gle reconnaît Gogle, Google et Gooogle (entre 1 et 3 o)

Go{1,3}gle

Chiffres et numéros

Rechercher mes ids de produits comprises entre 5500 et 5900
^5[5-9]\d{2}$

Ajouter un 0 devant des numéros de téléphone incomplets (9 chiffres)

Chercher :

^(\d{9})$

Remplacer par :

0$1

Remplacer le 0 d’un numéro de téléphone par un +33

Chercher :

^0(\d{9})$

Remplacer par :

+33$1

Remplacer les points par des virgules pour le formatage des chiffres

Chercher :

(\d*)\.(\d*)

Remplacer par :

$1,$2

Et inversement…

Mails, domaines & urls

Repérer une adresse mail valide :
N’utilisez pas une regex. Le nombre d’extensions de domaines a explosé, les caractères autorisés dans une adresse également, et aucune regex ne peut faire ce travail de façon 100% fiable. Demandez de l’aide à un développeur sérieux (qui n’utilisera pas une regex dans ce cas)


Repérez des adresses Gmail ou Hotmail :

^(.*@(?:gmail|hotmail).*)$

En gardant les www.

Chercher :

https?\:\/\/([^\/]*)(?:\/(?:.*))?

Remplacer par :

$1

En excluant les www.

Chercher :

https?\:\/\/(?:www\.)?([^\/]*)(?:\/(?:.*))?$

Remplacer par :

$1

Enlever les ancres de liens :

Chercher :

(.*)#(.*)

Remplacer par :

$1

Enlever les paramètres d’une url :

Chercher :

(.*)\?(.*)

Remplacer par :

$1

Extraire le premier paramètre d’une url (un utm par ex)

Chercher :

(?:.*)\?([^&]*)(?:.*)

Remplacer par :

$1

Extraire l’utm_campaign spécifiquement

Chercher :

utm_campaign=(.[^&]*)(?:.*)?

Remplacer par :

$1

Analytics, Scrap & IP

Exclure un range d’IP : vous devez exclure 192.168.10.1, .2 , .3 jusqu’à 255

192\.168\.10\..*

Ou les adresses 192.168.10.* mais aussi 192.168.11, .12,.13 jusqu’ à .19

192\.168\.1.?\..*

Si vous utilisez 192\.168\.1.* vous matchez aussi 192.168.100.*, 101, etc.

L’utilisation du | peut vous sauver la vie dans la gestion des IP, également :

192\.(168|169|170)\.1.?\..*

Exclure deux domaines

(preprod|staging)\.monsite\.com

Extraire le contenu d’un paragraphe dans un code source scrapé

<p>(.*)<\/p>

Extraire les liens des balises a href (en excluant les vides et les ancres)

Chercher :

<a href="([^#"]+)">(?:.*)

Remplacer par :

$1

Uniquement les ancres

Chercher :

<a href="#(.*)">(?:.*)

Remplacer par :

$1

Définition et fonctionnement

Une expression régulière (Regular Expression, souvent abrégée en regex ou RegEx et plus rarement expression rationnelle) décrit un motif,

un pattern que nous souhaitons rechercher et localiser dans du texte (y compris des chiffres)

.

Ce motif a pour but d’analyser du texte qui a été encodé numériquement sous forme de “chaîne de caractères” (string en VO).

Le terme “caractère” employé ci-après désigne n’importe quel élément du texte ainsi encodé : les lettres et chiffres mais également les espaces, signes de ponctuation et autres sauts de lignes ou tabulations. Chacun des éléments possède un symbole nous permettant de l’identifier et de l’utiliser dans notre pattern.

Les caractères spéciaux

Une expression régulière est construite à partir de caractères dits « réservés », possédant chacun un sens particulier qui permettent de définir différents comportements de recherche sur les patterns.

Par défaut, une regex est sensible à la casse : a ≠ A Voici les caractères réservés les plus courants et leur signification : ^
  • Désigne le début d’une chaîne de caractères (ou d’une case d’un tableur)

$
  • Désigne la fin d’une chaîne de caractères

.
  • Représente n’importe quel caractère, une seule fois

?
  • Suit toujours un caractère. Indique que le caractère précédent est présent 0 ou 1 fois.

*
  • Suit toujours un caractère. Indique que le caractère précédent est présent 0 ou plusieurs fois

+
  • Suit toujours un caractère. Indique que le caractère précédent est présent au moins une fois

()
  • Capture un groupe de caractères dans l’ordre

  • La variante (?:) permet le matching sans capture

  • Permet la réutilisation des valeurs repérées (search & replace, filtre GA…)

  • (abc) ne repère pas acb mais uniquement abc

  • Pro-Tip : (.*) désigne donc n’importe quelle combinaison de caractères, y compris la chaîne vide

{}
  • Nombre de caractères

  • S’applique au caractère précédent ou au groupe ()

  • 1 seul chiffre {n} : le caractère ou groupe apparaît exactement n fois

  • 2 chiffres {n,m} : apparaît au moins n fois et au plus m fois

[]
  • Ensemble de caractères (individuels)

  • [abc] repère acb (et abc et cba, etc.)

  • Attention, un ^ dans un [] ne représente pas le début de chaîne, mais une négation

  • Certains caractères spéciaux perdent leurs signification dans un ensemble

  • On peut utiliser le tiret comme raccourci : [0-9], [A-Z], [0-9A-Za-z]

|

  • Permet une ou des alternatives. Représente le OU logique

\d et \D

  • d représente n’importe quel chiffre

  • D représente n’importe quel caractère qui n’est pas un chiffre

\w et \W

  • w représente n’importe quel caractère alphanumérique

  • Donc \w+ représente tous les “mots” d’une chaîne (= les éléments séparés par un espace, une tabulation, un saut de ligne…)

  • W représente n’importe quel caractère ni chiffre, ni lettre

\s et \S

  • s représente n’importe quel signe invisible d’espacement (espace, tabulations…)

  • S représente n’importe quel caractère qui n’est pas un espacement

L’échappement

Que se passe-t-il si vous recherchez un point dans votre texte ? Ce caractère réservé est un “joker” : il sert à identifier n’importe quel caractère dans le texte !

Le mécanisme permettant de rechercher un caractère réservé dans une chaîne s’appelle “échappement” (faute de meilleure traduction).

Ça consiste tout simplement à ajouter un anti-slash \ (oui ce caractère que vous n’utilisez jamais : alt Gr+8 sous Windows ou Alt + Maj + / sous MacOS) devant votre point : \.

  • A noter que certains outils Google vous permettent d’omettre l’antislash devant le point

Ce mécanisme doit être utilisé dès que vous recherchez un caractère réservé. Vous allez beaucoup le rencontrer pour les matching sur des urls, par exemple à cause des slashes et des points, omniprésents.

L’extraction des motifs et patterns

La plupart des outils vous permettent de récupérer la (ou les) valeurs trouvée par votre regex (à l’aide d’un groupe parenthèsé () )pour la réutiliser, typiquement dans un rechercher/remplacer. Le plus souvent, la 1ere valeur repérée sera désignée sous le terme $1, la seconde $2, etc. (c’est le cas pour Gsheets, GA, etc.)

Ainsi, imaginons vouloir corriger les fautes du texte ci-dessous :

  1. Expression Régulières
  2. Expressions Régulières
  3. Expression Rationnelles
  4. Expressions Rationnelles

Pour corriger les erreurs et passer au pluriel, nous devons :

  1. remplacer toutes les occurrences de Expression par Expressions

  2. mais pas les occurrences d’Expressions sinon on obtiendrait “Expressionss” !

  3. et conserver la suite de la chaîne.

On cherchera ainsi

^Expression[^s](.*)$

Que l’on remplacera par

Expressions $1

Ici $1 se réfère à la fin de la chaîne, capturée par (.*)$, donc tout ce qui est situé après Expression (sans ‘s’) dans lignes 1 et 3 de notre texte. Les lignes 2 et 4, sans faute d’orthographe, seront ignorées par notre regex.

Pour aller (vraiment) plus loin

Besoin d’un expert en Analytics ?

Ces articles peuvent vous intéresser

  • Data

Les principales alternatives à Google Analytics conformes au RGPD et validées par la CNIL

  • Data

Tout comprendre du Tracking Server-Side : définition, applications et solutions