- Data
- SEA
- SEO
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
Je recherche tous les éléments finissant par Google
Je veux remplir toutes les cases vides de mon tableau avec des zéros
Chercher :
Remplacer par :
Je recherche une variante avec et sans accent du mot activité, y compris les pluriels
Je risque d’avoir aussi des fautes de frappe…👉
Alternativement, pour rechercher les noms finissant par ‘s’ ou ‘x’ (pour identifier des pluriels)
Plus simple : regrouper pluriel et singulier
Plus riche : trouver toutes les déclinaisons d’un verbe (1er groupe)
Fautes et corrections
Je recherche une faute de frappe sur le nom Empirik
Repère Empirik, Empiric et Empirique mais aussi Empiriks, Empirika… Pour s’arrêter aux trois variantes :
Je recherche une faute de frappe sur le mot Gooooogle : (repère Google, Gooogle, Goooogle, etc.)
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)
Alternativement : Go{2}gle ne reconnaît que Google exactement (2 o)
Go{1,3}gle reconnaît Gogle, Google et Gooogle (entre 1 et 3 o)
Chiffres et numéros
Ajouter un 0 devant des numéros de téléphone incomplets (9 chiffres)
Chercher :
Remplacer par :
Remplacer le 0 d’un numéro de téléphone par un +33
Chercher :
Remplacer par :
Remplacer les points par des virgules pour le formatage des chiffres
Chercher :
Remplacer par :
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 :
Enlever les ancres de liens :
Chercher :
Remplacer par :
Enlever les paramètres d’une url :
Chercher :
Remplacer par :
Extraire le premier paramètre d’une url (un utm par ex)
Chercher :
Remplacer par :
Extraire l’utm_campaign spécifiquement
Chercher :
Remplacer par :
Analytics, Scrap & IP
Exclure un range d’IP : vous devez exclure 192.168.10.1, .2 , .3 jusqu’à 255
Ou les adresses 192.168.10.* mais aussi 192.168.11, .12,.13 jusqu’ à .19
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 :
Exclure deux domaines
Extraire le contenu d’un paragraphe dans un code source scrapé
Extraire les liens des balises a href (en excluant les vides et les ancres)
Chercher :
Remplacer par :
Uniquement les ancres
Chercher :
Remplacer par :
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 :
- Expression Régulières
- Expressions Régulières
- Expression Rationnelles
- Expressions Rationnelles
Pour corriger les erreurs et passer au pluriel, nous devons :
-
remplacer toutes les occurrences de Expression par Expressions
-
mais pas les occurrences d’Expressions sinon on obtiendrait “Expressionss” !
-
et conserver la suite de la chaîne.
On cherchera ainsi
Que l’on remplacera par
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
- L’outil ultime pour tout apprendre et comprendre sur les regex, dont sont issues certaines captures effectuées lors de nos tests pour cet article : https://regex101.com/
- Une alternative au précédent, pour tester et comprendre (ou expliquer) facilement vos regex : https://www.regextester.com/
- La référence Google de la syntaxe des regex : https://github.com/google/re2/blob/main/doc/syntax.txt
- Visualiser le fonctionnement de l’algorithme des regex : https://blog.robertelder.org/regular-expression-visualizer/the_regex
- Un long article de qualité : https://towardsdatascience.com/everything-you-need-to-know-about-regular-expressions-8f622fe10b03
Besoin d’un expert en Analytics ?