Blog ENI : Toute la veille numérique !
Dernière chance (fin le 29/02) : -25€ dès 75€ sur les livres en ligne, vidéos... code FUSEE25. J'en profite !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici

Débuter avec RegEx

Introduction

Dans ce chapitre, nous allons découvrir les expressions régulières souvent abrégées en RegEx. Le fonctionnement de RegEx étant complexe, nous allons donc étudier ces expressions de manière progressive, pour vous permettre d’assimiler leurs différents cas d’usages.

Le but de ce chapitre sera donc de décrire ce qu’est RegEx et d’essayer de comprendre en quelques exemples simples l’intérêt et comment l’utiliser dans les grandes lignes. Nous n’irons pas dans les détails car RegEx est un sujet tellement vaste qu’il pourrait faire l’objet d’un livre.

Démystifier RegEx, ou tout du moins essayer

1. Qu’est-ce que RegEx ?

RegEx (Regular Expression), également nommé « expressions régulières », est une méthode permettant d’effectuer des recherches de mots, caractères ou autres dans un fichier, un texte…

Cela permet également, en fonction d’un modèle défini (qui sera notre suite RegEx), de valider une saisie utilisateur.

RegEx se retrouve dans la plupart des langages informatiques et apparaît au premier abord comme assez difficile à appréhender et à manier.

Il s’agit d’un outil très puissant qui permet de filtrer n’importe quels texte, chaîne ou contenu de fichier pour trouver quelque chose.

RegEx se retrouve dans de nombreux outils de notre quotidien pour valider, vérifier quelque chose qui a été saisi par un utilisateur :

  • Validation d’adresse e-mail lors d’une saisie d’identifiants.

  • Validation de mot de passe lors d’une saisie d’identifiants.

  • Validation de numéro de sécurité sociale.

  • Validation de numéro fiscal.

2. RegEx et syntaxe

La syntaxe des expressions régulières est ce qui a tendance à nous éloigner de leur utilisation. En effet, il s’agit généralement d’une suite de caractères et symboles qui n’ont à première vue aucun sens et très difficile à décrypter.

Prenons l’exemple suivant : [0-9A-Z]{5}. Il s’agit en fait d’une suite RegEx permettant de définir que les cinq premiers caractères doivent être de type alphanumérique (lettres ou chiffres).

Ou encore celui-ci : ^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$. Il s’agit d’une expression régulière (RegEx) permettant de valider une adresse e-mail.

En RegEx, il y aura deux caractères que nous retrouverons régulièrement en début et fin du code :

  • ^ : signifie le début d’une chaîne de caractères.

  • $ : signifie la fin d’une chaîne de caractères.

Nous allons donc lister les caractères les plus utiles et simples en RegEx.

a. Les caractères d’échappement

Par défaut en PowerShell, le caractère...

Exemples rapides

La chaîne doit contenir au moins le mot

Nous souhaitons ici vérifier qu’une chaîne de caractères contient au moins le mot « bonjour ». Pour vérifier l’utilisation d’un mot précis, nous utiliserons \b.

Ci-dessous l’expression régulière :

\bbonjour*$ 

La chaîne doit contenir une valeur entre deux bornes

Nous utiliserons une rangée de lettres entre a et z puis spécifierons notre valeur de début 3 et valeur de fin 7 entre les caractères { et }.

Ci-dessous l’expression régulière :

^[a-z]{3,7}$ 

La chaîne ne doit pas contenir le mot

Nous souhaitons ici vérifier qu’une chaîne de caractères ne contient pas le mot « toto ». Pour exclure un mot, nous utiliserons ?!.

Ci-dessous l’expression régulière :

^((?!toto).)*$ 

La chaîne doit commencer par un chiffre

Pour vérifier qu’une chaîne commence par un chiffre, nous pouvons utiliser \d ou la rangée [0-9].

Ci-dessous les deux possibilités :

^\d 
OU 
^[0-9] 

La chaîne doit contenir au moins un chiffre

Contrairement à l’exemple précédent, nous n’utiliserons pas le caractère ^.

Ci-dessous l’expression régulière :

\d 

La chaîne doit commencer...

Les ressources intéressantes

Il existe de nombreux sites permettant de générer ou vérifier des expressions régulières. Ci-dessous une liste de certains de ces sites :

Quelques exemples du quotidien

Nous allons voir ci-dessous quelques suites rapides de RegEx avec ce qu’elles font.

1. Validation d’une adresse e-mail

Ci-dessous l’expression régulière permettant de valider une adresse e-mail :

^[\w-\.]+@\w+\.+[\w-]{2,4}$ 

Pour être valide, une adresse e-mail doit contenir :

  • une suite de caractères,

  • le caractère « @ »,

  • une autre suite de caractères,

  • le caractère « . »,

  • une suite de caractères entre deux et quatre chiffres.

Analysons donc cette expression point par point :

  • ^ : spécifie le début d’une chaîne de caractères.

  • [ ] : spécifie un ensemble de caractères.

  • \w : n’importe quel caractère alphanumérique ou underscore.

  • - : spécifie le séparateur de l’ensemble.

  • \. : il peut y avoir tous les caractères sauf le retour chariot.

  • [\w-\.] : l’ensemble doit donc contenir n’importe quels caractères alphanumériques (autant que l’on souhaite).

  • +@\w : le contenu précédent doit être présent au moins une fois puis être succédé par le caractère @ puis par n’importe quel caractère alphanumérique ou underscore.

  • +\. : le contenu précédent doit être présent au moins une fois puis il doit y avoir un point « . ».

  • [\w-\.] : le contenu précédent doit ensuite contenir n’importe quels caractères alphanumériques (autant que l’on souhaite).

  • {2,4} : l’ensemble précédent doit contenir entre deux et quatre caractères.

  • $ : spécifie la fin d’une chaîne de caractères.

2. Saisie de nom d’ordinateur

Nous allons créer un système de vérification de nom d’ordinateur.

Ci-dessous, ce que nous souhaitons :

  • Le nom doit commencer par desktop ou laptop puis -.

  • Ensuite, il doit y avoir une suite de caractères alphabétiques qui doit contenir entre trois et sept caractères.

L’expression régulière sera la suivante :

\bdesktop\-[a-z]{3,7}$|\blaptop\-[a-z]{3,7}$ 

Détaillons ce que nous souhaitons avec l’équivalent...

PowerShell et RegEx

1. Utiliser RegEx avec PowerShell

Nous avons étudié comment fonctionnait RegEx ainsi que quelques exemples simples d’utilisation.

Nous allons maintenant étudier comment utiliser RegEx avec PowerShell afin de vérifier une suite de caractères ou le contenu d’un fichier.

Il existe différentes méthodes permettant d’utiliser RegEx avec PowerShell. Nous verrons ces méthodes d’abord en théorie puis en pratique en utilisant nos exemples précédents.

a. -Match et -NotMatch

Il ne s’agit pas ici d’une méthode mais de deux opérateurs, au même titre que -eq (equal), -gt (greater than), -lt (lesser than)…

Davantage d’informations sur les opérateurs dans le chapitre Les opérateurs.

L’opérateur -Match permettra de vérifier qu’une chaîne de caractères correspond à un modèle RegEx.

L’opérateur -NotMatch, quant à lui, permettra de vérifier qu’une chaîne de caractères ne correspond pas à un modèle RegEx.

L’utilisation de ces deux opérateurs avec un modèle RegEx s’effectue ainsi :

<Chaîne de caractères> -Match <Modèle RegEx> 
<Chaîne de caractères> -NotMatch <Modèle RegEx> 

Cela retournera ensuite un résultat True ou False.

L’exemple suivant vérifie si une chaîne est comprise entre 0 et 6 :

PS C:\Users\damien.vanrobaeys> "5" -match "^[0-6]$" 
True 

L’exemple suivant vérifie si une chaîne n’est pas comprise entre 0 et 6 :

PS C:\Users\damien.vanrobaeys> "5" -notmatch "^[0-6]$" 
False 

L’utilisation des opérateurs -Match et -NotMatch fonctionne à merveille, mais cela retournera par défaut un booléen True ou False.

Pour récupérer du contenu sur des chaînes de caractères en utilisant une expression régulière, il faudra utiliser la méthode $matches.

b. Classe [regex]

PowerShell propose, outre l’opérateur -Match, une classe permettant de valider un modèle RegEx. Cette classe est [regex].

Nous allons tout d’abord initialiser notre objet en lui assignant notre modèle RegEx....