Les Expressions régulières en 10 minutes

Dans le tuto envoyer des SMS à un groupe j’utilise une expression régulière pour extraire les mobiles d’une liste de numéros de téléphone.
Je vous ai lancé ça sans prendre le temps de définir la nature d’une expression régulière. Je vous l’ai posée là, sans la décortiquer, ni aucune explication. Voici donc cet article qui se présente comme une bonus track pour détailler comment cette expression fonctionne.
J’espère ainsi vous donner envie d’aller plus loin et d’exploiter cet outil. Même si, dans les grandes lignes, leur compréhension ne pose pas de difficulté particulière, elles combinent puissance et utilité.

Petit Rappel

Pour identifier les numéros de téléphone mobile, j’utilise l’action « faire correspondre à ».

Cette action utilise un outil particulièrement utile et relativement simple à comprendre avec un minimum d’effort : les expressions régulières.

C’est un outil capable d’identifier des motifs spécifiques dans une suite de caractères.

L’expression qui est utilisée dans notre raccourci est la suivante :

^(\+33\s)?0?[67][0-9.\s]+

Le résultat de l’action sera la liste des textes pour lesquels une correspondance au motif (l’expression régulière) a été trouvée.

Comprendre la correspondance de texte

Avec cet article, mon objectif n’est pas de vous faire maitriser totalement les expressions régulières. Le sujet est assez large et il faudrait bien plus que ces quelques paragraphes.

J’espère tout de même vous donner quelques bases pour comprendre les plus simples, voire créer les vôtres.

Commençons par apprendre les rudiments de la lecture.

Lire une expression régulière

Une expression régulière permet de décrire de façon synthétique un motif de texte. Dans une telle expression, chaque caractère correspond :

  • à lui même ;
  • à un opérateur qui s’applique au motif qui le précède ;
Un motif simple

La forme la plus simple d’un motif est une suite de caractères. Par exemple, l’expression régulière abc va correspondre, entre autres, aux textes ci-dessous :

  • « abc », qui est exactement la valeur indiquée par le motif.
  • « chercher abc un texte », car le motif est inclus dans le texte.
  • mais aussi « le motif abc est dans abc ».

Important, dans ce dernier exemple l’action « faire correspondre à » va renvoyer deux correspondances : une pour chaque fois où le motif a été identifié.

Si les expressions régulières se limitaient à ce genre de suite, elles ne seraient pas très utiles.

Il est possible de construire un motif plus complexe en utilisant :

  • des caractères spéciaux ;
  • des opérateurs.

Il se trouve que les caractères spéciaux ne peuvent pas être utilisés tels quels dans un motif. On donc doit les précéder d’un « \ » pour utiliser le vrai caractère.

Ce « \ » sert aussi de préfixe à certains méta-caractères, c’est à dire qui désigne non pas un seul caractère, mais une famille de symboles.

Quelques opérateurs

^ désigne le début d’une ligne/texte, il ne correspond à aucun caractère. Son pendant est le $ pour la fin de ligne/texte.

Les signes + et ? sont les opérateurs les plus simples et les plus utiles :

  • + pour un motif répété au moins une fois :
    a+ correspond à « a », « aaa », mais pas à « ab ».
  • ? pour un motif optionnel ou présent au plus une fois :
    ab? correspond à « a » et « ab ».
Métacaractères

Le . désigne n’importe quel caractère :
a.c correspondra à « abc », « axc », mais pas à « ac », ni « abbbc ».

Dans notre expression, on utilise deux autres métacaractères :

  • \s représente tout type d’espace ;
  • \d représente un chiffre.
Groupes

Utiliser les opérateurs + ou ?c’est bien, mais d’un usage limité avec un seul caractère…

\+33? ne permet pas d’identifier le préfixe « +33 » puisque le ? ne s’applique qu’au symbole qui le précède. Il correspond aux textes « +3 » ou « +33 », mais ce n’est pas ce qu’on veut.

On peut élargir l’application d’un opérateur en encadrant avec des parenthèses, ( et ), le motif sur lequel il doit s’appliquer.

Dans cette situation, il est donc indispensable de désigner le motif pour ensuite lui appliquer l’opérateur ? :

(+33\s)?

Dans cet exemple, l’opérateur ? s’applique donc au motif +33\s.

Famille de caractères

[ et ] permettent de définir une série d’alternatives de symboles :

  • Il permet des raccourcis comme les intervalles de symboles. [0-9] désigne un chiffre de 0 à 9
  • Mais on peut aussi ajouter n’importe quel caractère

Et notre motif de téléphone ?

Petit rappel, nous identifions les numéros de portable avec l’expression régulière ci-dessous :

^(\+33\s)?0?[67][0-9.\s]+

Je peux essayer de vous la traduire en français, mais le plus simple peut-être de commencer par faire un dessin.

visualisation graphique d’une expression régulière
  • Le numéro peut commencer par un groupe qui représente le préfixe international optionnel de la France. Il est composé un signe « + » suivi du nombre « 33 » et d’un espace de séparation.
  • Après cet éventuel préfixe se trouve le numéro proprement dit qui peut, ou non, commencer par un « 0 », mais dont le premier chiffre doit être un 6 ou un 7. Le reste du numéro est une série de chiffres éventuellement séparés par des espaces ou des points

**Note : ** Les diagrammes d’expression peuvent être construits avec l’outil en ligne regexper.com.

Adapter l’expression pour d’autres pays

Cette expression ne fonctionne qu’avec les numéros français, dont le préfixe international est le +33.

Vous pouvez adapter l’expression à un autre pays en changeant cette partie :

  • le numéro de préfixe du pays, par exemple +41 pour la Suisse ;
  • les premiers chiffres attendus pour un portable dans ce pays : pour la Suisse les numéros mobiles commencent par 74, 75, 76, 77, 78 et 79.

Pour les mobiles suisses, l’expression régulière serait donc :

^(\+41\s) ? 7[4-9][0-9.\s]+ (diagramme)

Pour finir

J’espère que cette rapide introduction vous aura donné envie d’en apprendre un peu plus sur les expressions régulières.

C’est un outil puissant qui peut vous faciliter grandement la vie.

Je vous propose un petit challenge personnel : explorez une des deux autres actions qui utilisent les expressions régulières.

Cherchez correspondance dans la liste des actions. Vous devriez trouver deux nouvelles actions :

  • « Remplacer le texte » ;
  • « Obtenir le groupe du texte correspondant ».

La première va vous permettre de remplacer du texte en vous appuyant, éventuellement, sur des expressions régulières pour la recherche.

La seconde action fonctionne en combinaison avec « correspondre au texte » et l’utilisation de groupes dans l’expression régulière. Lorsque vous avez défini un groupe dans votre motif, vous pouvez récupérer sa valeur avec cette action.

Et voilà un tout nouvel éventail de possibilités qui s’ouvre à vous. Amusez-vous bien avec les correspondances par expression régulière.