Aller au contenu

Petite introduction aux REGEX - Le Hollandais Volant


Ldfa

Messages recommandés

Si vous n’avez jamais programmé, ou si vous débutez tous juste, alors peut-être avez-vous envie de savoir ce que sont les regex.

Le mot regex est une contraction d’un terme anglophone qui se traduit par « expression régulière ». Une expression régulière est en réalité une suite de caractères (i.e. une expression) dont le format est connu, bien précis (i.e. régulier).

Si je dis que je veux une phrase composée de 3 mots séparés par des espaces et possédant 2, 5 et 4 lettres, alors j’ai crée une expression régulière : le format de la phrase étant connu et bien précis.
Une telle phrase pouvant être aussi bien « Il court vite » ou « je mange bien », car ces deux phrases satisfont l’expression régulière « 3 mots de 2, 5 et 4 lettres ». Cette expression régulière marcherait aussi sur « le chat mange », car il n’est pas écrit que la taille des mots doit être dans un ordre précis (même s’il est tout à fait possible d’en faire une avec cette condition).

Un autre exemple, déjà plus concret, c’est par exemple l’expression régulière « 5 groupes de 2 chiffres, séparés du suivant par un tiret ». Vous devinez ce que représente cette expression ? C’est un numéro de téléphone comme « 01-12-23-34-45 ».

Là où ça devient très amusant, c’est quand on doit dire à l’ordinateur qu’un numéro de téléphone peut être composés de groupes de chiffres séparés par des tirets ou des espaces ou des points ! Les regex permettent de telles actions. Ils permettent même de détecter si le numéro commence par 06 (un portable), 08 (un numéro surtaxé) ou un numéro étranger !

En programmation, on a souvent recourt des expressions régulières. Par exemple, il n’est pas rare que les liens que vous cliquez sur une page web sont produits par des regex : le programme qui génère la page cherche les liens en appliquant l’expression régulière « une suite de caractères qui commence par “http://” ou “https://” ».

Évidemment, les expressions régulières dans un programme ne sont pas des phrases comme « 5 groupes de 2 chiffres, chaque groupe est séparés du suivant par un tiret », mais on écrira plutôt ça :

([0-9]{2}-){5}

Si on analyse ce bout de code, on voit effectivement [0-9], qui correspond au fait qu’on cherche des chiffres de 0 à 9, le {2} qui correspond au fait qu’on cherche des chiffres deux par deux, le tiret, qui désigne le tiret après un groupe de deux chiffres, et le {5} qui signifie qu’on cherche 5 fois un groupe de deux chiffres suivi d’un tiret.
En réalité, cette regex ne marchera pas sur 01-12-23-34-45, car le dernier groupe n’est pas suivi d’un tiret. On écrira plutôt ceci :
([0-9]{2}-){4}[0-9]{2}
(qui signifie « 4 groupes de deux chiffres + un tiret, et un groupe de deux chiffres à la fin, sans tiret »).

Comme on peut le constater, les regex deviennent rapidement compliquées à lire. En général, le programmeur commence par en écrire une partie et ajoute des morceaux au fur à mesure qu’il écrit sa regex, tout comme on écrit la phrase « 5 groupes de 2 chiffres, chaque groupe est séparés du suivant par un tiret » : on commence par traduire le terme « chiffres », puis on dit « en fait, il y en a deux », puis « je veux aussi un tiret », et enfin « je veux tout ça 5 fois de suite ».

Les regex permettent de détecter des choses (des numéros de téléphone dans une page, par exemple). Il permet à l’ordinateur de mettre un sens sur une suite de caractères (il sait que tout ce qui correspond à 5 groupes de 2 chiffres est un numéro de téléphone, et peut, si on lui ordonne, les rendre cliquables pour appeler le numéro en question).
Les regex sont utilisés partout, dans pratiquement tous les logiciels : Word arrive à souligner les liens, Firefox lit le code source de la page avec un parseur, qui contient des milliers de regex, VLC utilise également ça pour les fichiers de sous-titres, et tous les sites web : un site qui demande un numéro de téléphone ou une adresse email sait si ce numéro est correct ou pas grâce aux regex.

Tout ceci n’est qu’une petite introduction aux expressions régulières, destinée aux débutants. Si vous vous lancez là dedans vous verrez rapidement que les possibilités sont énormes, mais également de toute la complexité des expressions représentant une regex.
Vous saurez alors dire à quoi sert ceci :

[a-z]{1,}@[a-z]{1,}\.[a-z]{1,3}
(ça détecte les emails du format simpliste « nomprenom@site.fr » — cette regex est à bannir cependant, car elle interdit des adresses avec des chiffres, des majuscules ou bien d’autres adresses valides…) ; ou bien ceci :
#<\s*/?\s*([a-zA-Z0-9-]+)(?: ((?:\s*\w+=(['\"]?)(?:(?!\g{3}).|(?:(?<=\\\)\g{3}))+\g{3})|(?:\s*[\w-\d]+=[^ >/]+))*(?:[\s\w\s]*))*/?>#S
(qui je l’avoue est vraiment très compliquée, mais qui détecte des choses simples : des attributs dans les balises HTML.

Quelques liens d’aide :

  • Regexper, qui permet de dessiner graphiquement ce que font les regex, par exemple pour le numéro de téléphone : http://www.regexper.com/#%28[0-9]{2}-%29{5} ;
  • Regulex, même genre que Regexper (le même outil est également hébergé chez moi, si vous avez peur d’aller dehors :p) ;
  • un mémo sur les regex ;
  • un autre mémo, celui du site-du-zero.
  • la Regex complète pour valider les emails, toutes les emails, rien que les emails ;
  • une regex étonnement simple pour tester si un nombre est premier ;
  • une page que les références arrière/avant dans les regex (c’est un domaine assez avancé des regex) ;
  • un jeu style Sudoku avec des regex.

Afficher l’article complet

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.