Aller au contenu

Démystifier les regex

Souvent jugées obscures, les expressions régulières sont pourtant des outils puissants pour manipuler le texte. Cet article vous propose une plongée claire et progressive dans leur histoire, leur logique et leurs usages, pour enfin dompter ces mystérieux motifs.

Une regex pour les gouverner toutes

Les expressions régulières, ou regex, sont souvent perçues comme des formules cryptiques réservées aux programmeurs chevronnés.
Pourtant, ces outils puissants permettent de rechercher, valider et manipuler du texte de manière précise et efficace.
Que vous souhaitiez vérifier un format d'email, extraire des données d'un fichier ou remplacer du texte, les regex sont des alliés incontournables.

Cet article vise à lever le voile sur leur mystère, en explorant leur histoire, leur fonctionnement, leurs opérateurs clés et leur utilité.

Histoire

Les expressions régulières naissent dans les années 1950 grâce au mathématicien Stephen Kleene, qui formalise les langages réguliers dans la théorie des automates.
Ses travaux définissent des motifs pour décrire des séquences de symboles, posant les bases théoriques des regex.
Dans les années 1960, Ken Thompson, co-créateur d’Unix, intègre ces concepts dans l’éditeur ed et crée l’outil grep (Global Regular Expression Print), rendant les regex populaires pour la recherche textuelle.
Dans les années 1980, le langage Perl dope leur puissance avec des fonctionnalités comme les groupes de capture, influençant leur adoption dans Python, JavaScript et d’autres langages.

Au fil du temps, les regex évoluent pour répondre à des besoins variés, de la validation de formulaires web (comme les adresses email) à l'analyse de logs système ou l'extraction de données dans le big data.
Des standards comme PCRE (Perl Compatible Regular Expressions) émergent pour uniformiser leur syntaxe à travers les langages.
Cependant, les regex restent fidèles à leurs origines : un pont entre la théorie mathématique et les applications pratiques, permettant de manipuler le texte avec une précision inégalée.
Aujourd'hui, elles sont un outil indispensable pour les développeurs, les data scientists et même les analystes non techniques, grâce à des interfaces conviviales comme regex101.com.

regex101: build, test, and debug regex
Regular expression tester with syntax highlighting, explanation, cheat sheet for PHP/PCRE, Python, GO, JavaScript, Java, C#/.NET, Rust.

Site très utile pour tester ses regex

Principe

Une expression régulière est une séquence de caractères définissant un motif (pattern) utilisé pour rechercher ou manipuler du texte.
Par exemple, le motif \d+ trouve un ou plusieurs chiffres dans une chaîne. Les regex fonctionnent en comparant ce motif à une chaîne de caractères, en identifiant les correspondances ou en effectuant des remplacements.
Elles reposent sur un langage formel qui combine des caractères littéraux (ex. : a, 1) et des métacaractères (ex. : *, .) pour décrire des règles de recherche. Leur puissance réside dans leur flexibilité : un seul motif peut capturer une grande variété de cas.

Opérateurs

Les expressions régulières s’appuient sur un ensemble d’opérateurs qui permettent de construire des motifs complexes.
Ces opérateurs peuvent être intimidants au début, mais une fois compris, ils deviennent des outils puissants pour manipuler du texte.
Voici une exploration détaillée des opérateurs les plus courants, accompagnée d’exemples pour clarifier leur usage :

Caractères littéraux

Les caractères littéraux correspondent exactement à eux-mêmes dans une regex. Par exemple, le motif chat recherchera exactement la séquence "chat" dans un texte, comme dans "Le chat dort".
Si vous voulez inclure un caractère spécial (comme . ou *) en tant que littéral, vous devez l'échapper avec une barre oblique inverse (\). Par exemple, \. correspond à un point littéral.

  • Exemple : hello trouve "hello" dans "hello world".
  • Astuce : Si vous cherchez un caractère spécial, comme une étoile, utilisez \*.

Métacaractères de base

Les métacaractères donnent aux regex leur flexibilité. Voici les principaux :

  • . : Représente n'importe quel caractère sauf une nouvelle ligne (sauf si l'option dotall est activée). Par exemple, c.t correspond à "cat", "cot", "cut", mais pas "cart".
  • * : Indique zéro ou plus d'occurrences du caractère ou groupe précédent. Par exemple, a* correspond à "" (chaîne de caractère vide), "a", "aa", etc.
  • + : Indique une ou plus d'occurrences. Par exemple, \d+ correspond à "123" ou "45678", mais pas à une chaîne vide.
  • ? : Indique zéro ou une occurrence. Par exemple, colou?r correspond à "color" ou "colour".
  • | : Représente un OU logique. Par exemple, chat|chien correspond à "chat" ou "chien".
  • Exemple pratique : Le motif b.n. correspond à "band", "bend", "bond", etc., car . remplace n'importe quel caractère.

Classes de caractères

Les classes de caractères permettent de définir un ensemble de caractères possibles pour une position donnée.

  • [abc] : Correspond à un seul caractère parmi ceux listés (a, b ou c).
  • [a-z] : Tout caractère entre a et z (minuscules).
  • [A-Z0-9] : Tout caractère majuscule ou chiffre.
  • [^abc] : Tout caractère sauf a, b ou c (négation).
  • Raccourcis :
    • \d : Un chiffre (équivalent à [0-9]).
    • \w : Un caractère alphanumérique ou underscore (équivalent à [a-zA-Z0-9_]).
    • \s : Un espace (espace, tabulation, nouvelle ligne).
    • Les versions majuscules (\D, \W, \S) représentent l'inverse.
  • Exemple : [\w.-]+ peut correspondre à une partie d'adresse email comme "jean.dupont-123".

Quantificateurs précis

Pour contrôler précisément le nombre de répétitions, utilisez :

  • {n} : Exactement n occurrences. Ex. : \d{3} pour "123".
  • {n,m} : Entre n et m occurrences. Ex. : \w{2,4} pour "ab", "abc" ou "abcd".
  • {n,} : Au moins n occurrences. Ex. : \s{2,} pour deux espaces ou plus.
  • Exemple : Pour un numéro de téléphone français simplifié (ex. : 0123456789), on peut utiliser 0\d{9}.

Groupes et captures

Les parenthèses () permettent de regrouper des parties de motifs et de capturer des correspondances pour un usage ultérieur (par exemple, dans des remplacements).

  • (motif) : Définit un groupe. Ex. : (abc)+ correspond à "abc", "abcabc", etc.
  • Capture : Les groupes capturés peuvent être réutilisés. Par exemple, dans (\w+)@(\w+)\.com, le premier groupe capture le nom d'utilisateur et le second le domaine.
  • Groupes non capturants : (?:motif) regroupe sans capturer, utile pour organiser sans stocker.
  • Exemple : Pour extraire le jour et le mois d'une date comme "12/05/2023", utilisez (\d{2})/(\d{2})/\d{4}.

Ancres et limites

Les ancres définissent des positions dans le texte.

  • ^ : Début de la chaîne (ou de la ligne en mode multiligne). Ex. : `^Bonjour `trouve "Bonjour" seulement en début de texte.
  • $ : Fin de la chaîne. Ex. : fin$ trouve "fin" en fin de texte.
  • \b : Limite de mot. Ex. : \bchat\b trouve "chat" mais pas "chatter".
  • \B : Inverse de \b, correspond à une position qui n'est pas une limite de mot.
  • Exemple : ^\d+$ valide une chaîne contenant uniquement des chiffres, comme "12345".

Modificateurs

Les modificateurs (ou flags) changent le comportement des regex. Ils dépendent du langage utilisé, mais les plus courants sont :

  • i : Insensible à la casse (ex. : chat correspond à "Chat" ou "CHAT").
  • m : Mode multiligne, où ^ et $ correspondent au début/fin de chaque ligne.
  • s : Mode "dotall", où . inclut les nouvelles lignes.

Exemple pratique complet

Pour valider une adresse email simplifiée (ex. : nom@domaine.com), on peut utiliser :

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

Exemple de regex

  • ^ : Début de la chaîne.
  • [a-zA-Z0-9._%+-]+ : Une ou plusieurs lettres, chiffres ou caractères spéciaux pour le nom.
  • @ : Le symbole @ littéral.
  • [a-zA-Z0-9.-]+ : Le domaine.
  • \. : Un point littéral.
  • [a-zA-Z]{2,} : Une extension (com, fr, etc.) d’au moins deux lettres.
  • $ : Fin de la chaîne.

Testez ce motif sur un outil comme regex101.com avec des emails comme "jean.dupont@example.com" ou "test@domaine.fr".

Conclusion

Les expressions régulières, bien qu’intimidantes au premier abord, sont des outils accessibles une fois leurs bases maîtrisées. Leur histoire montre une adaptation continue aux besoins de l’informatique, et leurs opérateurs offrent une flexibilité impressionnante pour manipuler du texte.

Que vous soyez développeur, analyste de données ou simplement curieux, apprendre les regex ouvre un monde de possibilités pour automatiser et simplifier les tâches textuelles. Commencez par des motifs simples, testez-les avec des outils comme regex101.com, et vous verrez que les regex ne sont pas si mystérieuses après tout !


Et si jamais vous souhaitez tester vos connaissances avec les regex, n'hésitez plus, faites des mots croisés :

Regex Crossword
A crossword puzzle game using regular expressions. Earn achievements completing puzzle challenges. Easy tutorials for people new to regular expressions.

Mots croisés en regex

Dernier