Regex : le guide complet pour débutants

Par FacileOutil

Les expressions régulières (aussi appelées regex) sont un outil magique qui fait peur à beaucoup de développeurs débutants, et même à certains confirmés. Pourtant, maîtriser ne serait-ce que 10 % des regex peut vous faire gagner des heures par semaine : extraction de données, validation de formulaires, recherche dans du texte, refactoring massif dans un éditeur de code. Ce guide pratique vous donne les bases solides pour comprendre et utiliser les regex dès aujourd'hui — sans jargon inutile.

C'est quoi une regex, concrètement ?

Une expression régulière est un motif (pattern) qui décrit une famille de chaînes de caractères. Au lieu de chercher "banane", vous pouvez chercher "tous les mots de 6 lettres commençant par b", ou "toutes les adresses email valides", ou "tous les numéros de téléphone français".

En une seule ligne de regex, vous remplacez 50 lignes de code if/else qui essaieraient de faire la même chose manuellement. C'est pour ça que les regex sont partout : dans Word, Excel, VS Code, Python, JavaScript, bases de données SQL, serveurs web...

Exemple concret

Vous avez un texte de 10 000 lignes et vous voulez extraire toutes les adresses email. Sans regex, vous devriez parcourir le texte caractère par caractère en gérant mille cas. Avec une regex :

[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}

Une ligne. Dix secondes à écrire. Tous les emails extraits.

Les briques de base : ce qu'il faut absolument connaître

1. Les caractères littéraux

La plupart des caractères dans une regex se cherchent tels quels. La regex chat trouvera le mot "chat" dans un texte. Sans surprise.

2. Le point . : n'importe quel caractère

Le point est un joker qui correspond à n'importe quel caractère sauf un retour à la ligne. c.t trouvera "chat", "cit", "c0t", "c!t" et ainsi de suite.

3. Les classes de caractères entre crochets

Entre crochets, on définit un ensemble de caractères possibles :

  • [abc] : un "a", un "b" ou un "c"
  • [a-z] : n'importe quelle lettre minuscule
  • [A-Z] : n'importe quelle lettre majuscule
  • [0-9] : n'importe quel chiffre
  • [a-zA-Z0-9] : lettre ou chiffre (alphanumérique)
  • [^abc] : n'importe quel caractère sauf a, b ou c (le ^ en début négation)

4. Les raccourcis de classes

Pour les classes fréquentes, il existe des raccourcis :

  • \d = [0-9] : un chiffre
  • \D = [^0-9] : tout sauf un chiffre
  • \w = [a-zA-Z0-9_] : caractère de mot (alphanumérique + underscore)
  • \W : tout sauf caractère de mot
  • \s : espace, tabulation, retour ligne
  • \S : tout sauf un espace

5. Les quantificateurs : combien de fois

Ce sont les outils les plus puissants des regex :

  • ? : 0 ou 1 fois (optionnel)
  • * : 0 ou plusieurs fois
  • + : 1 ou plusieurs fois
  • {3} : exactement 3 fois
  • {2,5} : entre 2 et 5 fois
  • {3,} : 3 fois ou plus

Exemples :

  • colou?r trouve "color" et "colour"
  • a+ trouve "a", "aa", "aaa", etc.
  • \d{5} trouve exactement 5 chiffres consécutifs (code postal français)

6. Les ancres : où dans la chaîne

  • ^ : début de chaîne (ou début de ligne en mode multi-ligne)
  • $ : fin de chaîne (ou fin de ligne)
  • \b : frontière de mot (ni avant ni après un caractère de mot)

Exemples :

  • ^Bonjour trouve "Bonjour" uniquement en début de ligne
  • monde$ trouve "monde" uniquement à la fin
  • \bchat\b trouve "chat" comme mot entier, pas dans "chatouille"

7. Les groupes et alternatives

  • (abc) : groupe capturant "abc"
  • (?:abc) : groupe non capturant
  • chat|chien : trouve "chat" ou "chien"
  • (chat|chien)s : "chats" ou "chiens"

Exemples pratiques : regex du quotidien

Valider un code postal français

^\d{5}$

Exactement 5 chiffres, rien avant, rien après. Match : "75001", "69000". No match : "7500", "1234AB".

Valider un numéro de téléphone français

^0[1-9](?:[\s.-]?\d{2}){4}$

Commence par 0, suivi d'un chiffre 1-9, puis 4 groupes de 2 chiffres séparés optionnellement par espaces, points ou tirets. Match : "01 23 45 67 89", "06.12.34.56.78", "0123456789".

Extraire tous les hashtags d'un texte

#\w+

Trouve "#SEO", "#marketing_digital", "#France2026".

Valider un email

^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$

Structure classique : caractères autorisés avant @, domaine, point, extension. Attention : cette regex est simplifiée. La vraie RFC 5322 fait 6000 caractères. Pour la plupart des usages, cette version suffit.

Trouver tous les nombres décimaux

\d+(?:[.,]\d+)?

Match : "42", "3.14", "1,99", "100".

Extraire toutes les URLs

https?://[^\s]+

http(s) suivi de :// puis tout ce qui n'est pas un espace.

Les pièges classiques des débutants

Piège 1 : oublier l'échappement

Les caractères spéciaux en regex (. + * ? ( ) [ ] { } ^ $ \ |) doivent être échappés avec un backslash quand vous voulez les chercher littéralement. Pour chercher un vrai point : \. et non . qui matcherait tout.

Exemple : 3.14 vs 3\.14. Le premier matche "3X14", le second uniquement "3.14".

Piège 2 : la greed des quantificateurs

Par défaut, les quantificateurs sont gloutons (greedy) : ils prennent le maximum possible. Pour du HTML <b>gras</b> et <i>italique</i>, la regex <.+> matche tout de <b> à </i>, pas ce qu'on veut.

Solution : ajouter ? après le quantificateur pour le rendre non-glouton (lazy) : <.+?> qui matche uniquement <b>, puis </b>, puis <i>, etc.

Piège 3 : croire que regex peut tout faire

Les regex sont parfaites pour les langages réguliers (pattern matching simple). Elles deviennent catastrophiques pour :

  • Parser du HTML/XML (utilisez un parser dédié comme Jsoup, BeautifulSoup, DOMParser)
  • Parser du JSON (utilisez JSON.parse)
  • Compter des parenthèses imbriquées

La citation célèbre : "Some people, when confronted with a problem, think 'I know, I'll use regular expressions.' Now they have two problems." — Jamie Zawinski.

Piège 4 : performance sur les grands textes

Certaines regex mal écrites ont une complexité exponentielle (catastrophic backtracking). Un pattern comme (a+)+b sur une chaîne de 30 "a" sans "b" peut faire freezer votre programme. Utilisez des classes spécifiques plutôt que .* quand possible.

Tester vos regex : outils indispensables

Jamais, jamais n'écrivez une regex complexe directement dans votre code. Testez-la d'abord interactivement :

  • Notre testeur de regex en ligne : coloration des matches, explication des motifs, test en temps réel
  • regex101.com : très complet, avec explication détaillée et quick reference
  • regexr.com : interface intuitive avec cheat sheet intégrée

Ces outils vous montrent exactement ce que la regex matche, avec une visualisation colorée. Impossible de debug sans ça.

Regex dans différents langages

Les regex sont presque identiques partout, mais avec des nuances de syntaxe. Voici les différences principales :

JavaScript

const regex = /^\d{5}$/;
const isValid = regex.test("75001");

Python

import re
if re.match(r"^\d{5}$", "75001"):
    print("Valide")

PHP

if (preg_match('/^\d{5}$/', '75001')) {
    echo 'Valide';
}

Bash / grep

grep -E "^[0-9]{5}$" fichier.txt

Les flags (modificateurs) essentiels

  • i : insensible à la casse. /bonjour/i matche "Bonjour", "BONJOUR", "bOnJoUr".
  • g : global (trouver toutes les occurrences, pas que la première)
  • m : multi-ligne (^ et $ matchent début/fin de chaque ligne)
  • s : . matche aussi les retours à la ligne

Questions fréquentes

Dois-je absolument apprendre les regex en 2026 ?

Oui, c'est un investissement qui paie. Les regex sont utilisées dans tous les langages, tous les éditeurs de code, tous les systèmes de gestion de fichiers. Les assistants IA peuvent écrire des regex pour vous, mais vous devez pouvoir les lire et les vérifier — sinon vous intégrerez des regex bugguées sans le savoir.

Quelle est la différence entre regex et glob (wildcards) ?

Les globs (*.txt, ?.log) sont un mini-langage utilisé dans les shells pour matcher des noms de fichiers. Ils sont bien plus limités que les regex. Attention : * en glob = "n'importe quoi" ; * en regex = "0 fois ou plus" (du caractère précédent). Ne pas confondre.

Pourquoi ma regex ne matche rien alors qu'elle semble correcte ?

Causes fréquentes : (1) caractère spécial non échappé (ex: point), (2) mauvais flag (manque i pour la casse), (3) caractères invisibles dans le texte (tabulations, espaces Unicode), (4) différence de dialecte regex entre langages. Testez toujours dans regex101 avant de blâmer votre code.

Les regex sont-elles sûres pour valider des entrées utilisateur ?

Oui pour le format ; non comme seule défense sécurité. Une regex peut vérifier qu'un email a la bonne forme, mais pas qu'il existe vraiment. Pour la sécurité (injection SQL, XSS), ne comptez JAMAIS sur les regex seules — utilisez des fonctions dédiées (prepared statements, échappement HTML).

Existe-t-il un dialecte regex universel ?

Non, il en existe plusieurs : POSIX Basic, POSIX Extended, PCRE (Perl), ECMAScript (JavaScript). Les différences portent surtout sur les raccourcis (\d, \w), les lookaheads/lookbehinds et l'Unicode. Le dialecte PCRE est le plus répandu. Pour les usages courants, 95 % des regex marchent partout.

Testez vos regex visuellement, en temps réel

Ouvrir le testeur de regex

Coloration des matches, explications des motifs, support de tous les dialectes courants.

Pour aller plus loin