Les bases des regex : comprendre les expressions régulières simplement

Les bases des regex : comprendre les expressions régulières simplement

Vous avez déjà dû chercher une adresse e-mail dans un texte, vérifier qu’un numéro de téléphone respecte un format précis ou extraire automatiquement des dates depuis un document. À première vue, ces tâches semblent demander beaucoup de code. Pourtant, une expression régulière, aussi appelée regex, peut souvent les résoudre en quelques caractères.

Le problème, c’est que la syntaxe des regex paraît rapidement obscure. Des symboles comme ^, $, + ou ? s’enchaînent et donnent l’impression de lire une langue étrangère. La bonne nouvelle : vous n’avez pas besoin de tout mémoriser pour commencer à les utiliser.

Dans cet article, vous allez découvrir les bases des expressions régulières, comprendre leur logique et apprendre à construire vos premiers modèles étape par étape.

Une expression régulière, c’est quoi exactement ?

Une expression régulière est un modèle de recherche. Elle sert à repérer, vérifier, extraire ou remplacer des morceaux de texte qui suivent une certaine règle.

Par exemple, si vous recherchez le mot marketing, vous pouvez utiliser une recherche classique. Mais si vous voulez trouver tous les mots qui commencent par « market », contiennent des variantes ou respectent un format particulier, une regex devient beaucoup plus pratique.

Voici quelques usages courants :

  • Vérifier qu’une adresse e-mail semble correcte.
  • Détecter un numéro de téléphone dans un texte.
  • Extraire des liens ou des hashtags.
  • Repérer des dates au format jour/mois/année.
  • Remplacer automatiquement certains mots.
  • Contrôler les données saisies dans un formulaire.

Une regex ne comprend pas le sens d’une phrase comme le ferait un humain. Elle vérifie uniquement si un texte correspond à une structure précise. C’est sa force, mais aussi sa limite.

Les caractères simples : commencer sans se compliquer

Le point de départ est très simple : les lettres et les chiffres sont généralement recherchés tels quels.

La regex chat trouvera donc le mot « chat » dans une phrase comme « Le chat dort sur le canapé ».

Elle pourra aussi trouver « chat » dans « acheter un chaton », car la séquence de caractères est présente. Si vous souhaitez rechercher le mot complet uniquement, vous devrez utiliser des repères spécifiques, que nous verrons plus loin.

Vous pouvez également combiner plusieurs caractères :

  • abc recherche la séquence « abc ».
  • 2025 recherche le nombre « 2025 ».
  • bonjour recherche exactement cette suite de caractères.

Cette première approche est utile pour comprendre le fonctionnement général : une regex décrit ce que vous voulez trouver, caractère après caractère.

Les caractères spéciaux les plus utiles

Les regex deviennent intéressantes grâce aux caractères spéciaux. Ils ne représentent pas toujours leur propre valeur. Ils indiquent plutôt une règle.

Le point : n’importe quel caractère

Le point . signifie « un caractère quelconque », à quelques exceptions près selon l’outil utilisé.

La regex c.t peut correspondre à :

  • cat
  • cet
  • cot
  • c7t

Le point remplace un seul caractère. La regex c..t correspondra donc à un « c », suivi de deux caractères, puis d’un « t ».

Attention : le point est très permissif. Si vous cherchez réellement un point, par exemple dans un nom de domaine, vous devez l’échapper avec un antislash : \..

Les crochets : choisir parmi plusieurs caractères

Les crochets permettent de définir une liste de caractères acceptés.

La regex [aeiou] correspond à une voyelle. Elle trouvera un seul caractère parmi « a », « e », « i », « o » ou « u ».

Vous pouvez aussi utiliser un intervalle :

  • [a-z] : une lettre minuscule de a à z.
  • [A-Z] : une lettre majuscule de A à Z.
  • [0-9] : un chiffre de 0 à 9.

Pour rechercher un caractère qui n’est pas dans la liste, placez le symbole ^ au début des crochets. La regex [^0-9] correspond à tout caractère qui n’est pas un chiffre.

Les classes abrégées

Les regex proposent plusieurs raccourcis très pratiques :

  • \d correspond à un chiffre.
  • \D correspond à un caractère qui n’est pas un chiffre.
  • \w correspond généralement à une lettre, un chiffre ou un underscore.
  • \W correspond à un caractère qui n’est pas alphanumérique.
  • \s correspond à un espace ou un caractère blanc.
  • \S correspond à un caractère qui n’est pas un espace.

Par exemple, \d\d\d recherche trois chiffres consécutifs. Cela peut correspondre à « 123 », mais aussi à une partie d’un nombre plus long.

Vous pouvez obtenir le même résultat avec [0-9][0-9][0-9]. La première version est simplement plus courte.

Les quantificateurs : indiquer combien de fois

Les quantificateurs permettent de préciser le nombre de répétitions d’un caractère ou d’un groupe.

  • * : zéro occurrence ou plus.
  • + : une occurrence ou plus.
  • ? : zéro ou une occurrence.
  • {n} : exactement n occurrences.
  • {n,} : au moins n occurrences.
  • {n,m} : entre n et m occurrences.

Quelques exemples permettent de mieux visualiser leur intérêt.

La regex \d+ recherche une suite composée d’un ou plusieurs chiffres. Elle reconnaîtra « 7 », « 42 » et « 2025 ».

La regex \d{4} recherche exactement quatre chiffres. Elle peut servir à détecter une année comme « 2025 ».

La regex https? accepte « http » et « https », car le s devient facultatif grâce au point d’interrogation.

Autre exemple : colou?r peut correspondre à « color » ou « colour ». Le u est optionnel. Cette astuce est utile lorsque vous devez gérer des variantes d’écriture.

Les repères de début et de fin

Par défaut, une regex peut trouver une correspondance au milieu d’une chaîne. Pour contrôler la position du texte, vous pouvez utiliser deux repères :

  • ^ indique le début de la chaîne.
  • $ indique la fin de la chaîne.

La regex ^Bonjour trouvera « Bonjour » uniquement si le texte commence par ce mot.

La regex fin$ trouvera « fin » uniquement si le texte se termine par ce mot.

En combinant les deux, vous pouvez vérifier une chaîne complète. Par exemple, ^\d{5}$ correspond à un code postal composé exactement de cinq chiffres.

Sans ces repères, la regex pourrait trouver cinq chiffres au milieu d’un texte plus long. Avec eux, vous imposez une structure stricte du début à la fin.

Les groupes et les alternatives

Les parenthèses permettent de regrouper plusieurs éléments afin de leur appliquer un quantificateur ou de les traiter comme une unité.

La regex (ab)+ correspond à « ab », « abab » ou « ababab ». Le symbole + s’applique ici à l’ensemble du groupe.

Le symbole | signifie « ou ». La regex chat|chien recherche « chat » ou « chien ».

Avec les parenthèses, vous pouvez rendre la logique plus claire :

^(chat|chien)$

Cette expression accepte uniquement « chat » ou « chien », du début à la fin. Elle ne correspondra pas à « chaton » ni à « mon chien dort ».

Les groupes sont également utiles pour extraire une partie précise d’un résultat. Dans de nombreux langages, le contenu entre parenthèses peut être récupéré séparément. C’est pratique pour isoler le jour, le mois et l’année d’une date.

Construire une regex pour une date

Prenons un exemple concret. Vous voulez repérer des dates au format 31/12/2025.

Une première version pourrait être :

\d{2}/\d{2}/\d{4}

Cette expression signifie :

  • \d{2} : deux chiffres pour le jour.
  • / : un séparateur slash.
  • \d{2} : deux chiffres pour le mois.
  • / : un second séparateur.
  • \d{4} : quatre chiffres pour l’année.

Cette regex détectera bien « 31/12/2025 », mais elle acceptera aussi « 99/99/0000 ». Elle vérifie le format, pas la validité réelle de la date.

Vous pourriez créer une expression beaucoup plus stricte, mais elle deviendrait rapidement difficile à lire et à maintenir. Dans la plupart des projets, il est préférable de vérifier d’abord la structure avec une regex, puis de valider la date avec une fonction dédiée.

C’est une règle importante : utilisez les regex pour ce qu’elles savent faire. Elles sont excellentes pour reconnaître une forme, moins adaptées pour gérer toute la logique métier.

Vérifier une adresse e-mail : attention aux fausses promesses

La vérification d’une adresse e-mail est un exemple très courant. Une expression simple peut ressembler à ceci :

^[^\s@]+@[^\s@]+\.[^\s@]+$

Décomposons-la :

  • ^ : début du texte.
  • [^\s@]+ : un ou plusieurs caractères qui ne sont ni un espace ni « @ ».
  • @ : le symbole obligatoire.
  • [^\s@]+ : le nom de domaine.
  • \. : un point réel.
  • [^\s@]+ : l’extension du domaine.
  • $ : fin du texte.

Cette expression accepte des formats comme [email protected]. Elle refuse une chaîne sans « @ », sans extension ou contenant des espaces.

Mais elle ne garantit pas que l’adresse existe réellement. Elle ne vérifie pas non plus que le serveur accepte les messages. Pour une inscription, le meilleur contrôle reste souvent l’envoi d’un e-mail de confirmation.

Échapper les caractères spéciaux

Certains caractères ont une signification particulière dans une regex. Si vous souhaitez les rechercher littéralement, vous devez les précéder d’un antislash.

Les caractères concernés incluent notamment :

  • .
  • +
  • *
  • ?
  • ^
  • $
  • ( et )
  • [ et ]
  • { et }

Par exemple, la regex 3\.14 recherche exactement « 3.14 ». Sans antislash, le point pourrait représenter n’importe quel caractère et trouver « 3X14 ».

Cette étape semble anodine, mais elle explique une grande partie des résultats inattendus lorsqu’une regex ne fonctionne pas comme prévu.

Les erreurs fréquentes à éviter

La première erreur consiste à vouloir écrire une expression gigantesque dès le départ. Une regex de plusieurs lignes, impossible à relire, est rarement une bonne idée.

Commencez par une version simple, testez-la, puis ajoutez progressivement des contraintes.

Évitez également de faire confiance à une regex sans tester les cas limites. Pour un formulaire, vérifiez au minimum :

  • Une valeur correcte.
  • Une valeur vide.
  • Une valeur trop courte.
  • Une valeur trop longue.
  • Des espaces au début ou à la fin.
  • Des caractères accentués.
  • Des caractères spéciaux.
  • Une chaîne contenant plusieurs éléments similaires.

Autre piège : oublier la différence entre rechercher une occurrence et valider toute une chaîne. La regex \d{5} trouvera cinq chiffres quelque part dans « Référence 12345 ». La regex ^\d{5}$ exigera que toute la valeur soit composée de cinq chiffres.

Tester ses expressions régulières efficacement

Écrire une regex directement dans votre code, puis la modifier au hasard, n’est pas la méthode la plus rapide. Utilisez plutôt un outil de test comme Regex101 ou RegExr. Ces plateformes permettent de saisir une expression, d’ajouter plusieurs exemples et de voir immédiatement les correspondances.

Une méthode simple consiste à travailler en trois étapes :

  • Écrire la règle la plus basique possible.
  • Ajouter un exemple qui doit fonctionner et un exemple qui doit échouer.
  • Renforcer progressivement l’expression selon vos besoins.

Gardez aussi une version lisible de vos regex dans votre documentation. Une expression régulière peut sembler évidente aujourd’hui et devenir incompréhensible dans trois mois, surtout pour un autre membre de l’équipe.

Regex et intelligence artificielle : un duo utile, mais à surveiller

Un assistant IA peut vous aider à générer une expression régulière ou à expliquer une syntaxe existante. C’est pratique lorsque vous bloquez sur un détail.

Mais évitez de copier une regex complexe sans la tester. L’IA peut produire une expression trop stricte, trop permissive ou adaptée à un autre langage de programmation.

La bonne approche consiste à demander :

  • Une explication morceau par morceau.
  • Des exemples qui fonctionnent.
  • Des exemples qui doivent être refusés.
  • Les limites de l’expression.
  • Une version compatible avec votre langage ou votre outil.

Vous gagnez ainsi du temps sans abandonner le contrôle sur le résultat.

Une méthode simple pour progresser

Pour apprendre les regex durablement, ne cherchez pas à mémoriser toutes les possibilités. Retenez d’abord les éléments les plus fréquents : \d, \s, ., les crochets, les quantificateurs, les parenthèses, ^ et $.

Ensuite, entraînez-vous sur des problèmes concrets :

  • Extraire les numéros de commande d’un texte.
  • Repérer les hashtags d’une publication.
  • Vérifier un code postal.
  • Identifier les fichiers avec une extension précise.
  • Remplacer plusieurs espaces par un seul.

Une regex n’a pas besoin d’être impressionnante pour être utile. Elle doit surtout être compréhensible, testée et adaptée au besoin réel. Commencez petit, vérifiez chaque règle et documentez les expressions importantes. Avec cette méthode, les symboles qui semblaient mystérieux deviennent rapidement de simples outils de recherche et de contrôle.