L’expression Regex peut être pénible. Enfin, parfois !
Découvrons les expressions régulières et leurs modèles. Nous allons nous pencher sur ces modèles qui ressemblent à une soupe alambiquée de caractères. Nous verrons ce que chaque caractère d’une expression régulière signifie.
Après avoir lu cet article, vous serez en mesure de créer vos expressions régulières et de les utiliser comme bon vous semble. Enfin, nous dresserons une liste des outils de test de RegEx en ligne afin que vous puissiez créer votre RegEx en fonction de vos besoins et le tester à l’aide de ces outils.
Introduction
Les expressions régulières, ou plus communément appelées RegEx, sont des séquences de caractères pouvant être utilisées comme motifs pour rechercher des caractères ou des chaînes de caractères.
Par exemple, pour déterminer si une chaîne ou une phrase contient le mot“pomme“, nous pouvons utiliser l’expression rationnelle“/apple” pour effectuer une recherche dans la chaîne. Autre exemple : nous pouvons utiliser"/[0-9]
” pour vérifier si une chaîne donnée contient un nombre compris entre 0 et 9.
Les expressions régulières et leur utilisation
Les expressions régulières sont largement utilisées à diverses fins dans les opérations modernes liées au web. La validation des formulaires web, les moteurs de recherche web, les analyseurs lexicaux dans les IDE, les éditeurs de texte et les éditeurs de documents sont autant d’exemples où les expressions régulières sont fréquemment utilisées.
Nous avons tous utilisé"CTRL
F"
à de nombreuses reprises pour rechercher un mot, une phrase ou une expression particulière dans un document ou un morceau de code. Cette opération peut être considérée comme un exemple très courant de l’utilisation des expressions régulières.
Avant d’aller plus loin, examinons une expression régulière très couramment utilisée.
Pouvez-vous deviner 🤔 la RegEX ci-dessous à quoi elle sert ?
^([a-zA-Z0-9_\-\.] )@([a-zA-Z0-9_\-\.] )\.([a-zA-Z]{2,5})$
Ne vous inquiétez pas si vous n’arrivez pas à le deviner. Je suis sûr que vous serez capable de le deviner à la fin de cet article.
Commençons par A, B, C de RegEx.
Tokens
Pour commencer, regardons les différents symboles dans la Regex montrée ci-dessus.
^([a-zA-Z0-9_\-\.] )@([a-zA-Z0-9_\-\.] )\.([a-zA-Z]{2,5})$
Si nous examinons l’expression rationnelle ci-dessus, nous constatons qu’elle est composée de nombreux symboles, caractères ou jetons. Voyons ce qu’ils signifient :
Jeton |
Signification |
^ |
Ce jeton indique le début d’une chaîne de caractères. |
(…) |
Ce symbole indique un groupe dans lequel tout ce qui est indiqué à l’intérieur de (…) est capturé. |
[…] |
Le [] entoure des caractères dont chacun peut être pris en compte. Par exemple : – [abc] [abc] correspondra soit à a, soit à b, soit à c. |
a-z | L’ensemble des alphabets minuscules de a à z. Il faut garder à l’esprit que les Regex sont sensibles à la casse. |
A-Z | L’ensemble des caractères majuscules de A à Z. |
0-9 | Les chiffres de 0 à 9. |
_ | Ceci correspondra au caractère _. |
\ | Il s’agit du caractère d’échappement. |
\. | Ceci correspond au caractère “.” littéralement. Il est utilisé parce que le symbole “.” dans les expressions rationnelles est un élément en soi qui correspond à n’importe quel caractère |
| Il s’agit d’un quantificateur. Il correspond à un ou plusieurs caractères avec lesquels il est utilisé. Par exemple,a signifie une ou plusieurs occurrences du caractère a. |
\- | Ce caractère correspondra au caractère “-“. |
@ | Ce caractère correspond au caractère “@”. |
{} | Il s’agit d’un autre quantificateur. Il est utilisé pour indiquer le nombre d’occurrences d’un caractère. Par exemple, a{3} signifie exactement 3 a. |
$ | Il indique la fin d’une chaîne de caractères. |
Décomposition du motif Regex donné
Maintenant, armés de cette connaissance préliminaire des jetons, essayons de décoder l’expression régulière ci-dessus :
<small><span style="color: #ff0000"><span style="color: #000000">^([a-zA-Z0-9_\-\.] )</span></span></small>
signifie que nous recherchons une chaîne qui commence par au moins un ou plusieurs caractères alphanumériques majuscules ou minuscules, des traits de soulignement, des traits d’union ou des points. Par exemple, tout ce qui ressemble à nom_utilisateur.01 correspondra au modèle. N’oubliez pas qu’il n’est pas nécessaire d’inclure tous les symboles ; n’importe quel caractère de[a-zA-Z0-9_\-\.]
suffit.- Le caractère @ correspond à une seule occurrence de @. Pour reprendre l’exemple précédent, quelque chose comme nom_utilisateur.01@ conviendra.
([a-zA-Z0-9_\-\N.] )
est similaire au premier point. Il signifie également que nous recherchons une chaîne contenant au moins un ou plusieurs caractères alphanumériques, traits de soulignement, traits d’union ou points. Pour reprendre l’exemple, nom_utilisateur.01@gmail convient ici.- Comme vous l’avez peut-être déjà deviné, il s’agit d’un motif de courrier électronique. Par ailleurs, \. correspond au caractère unique “.”. Si nous poursuivons avec l’exemple en cours, quelque chose comme nom_utilisateur.01@gmail.
([a-zA-Z]{2,5})$
, cela signifie que la chaîne doit se terminer par 2 à 5 caractères alphabétiques, en majuscules ou en minuscules. Si nous ajoutons .com à l’exemple précédent, nous obtenons user_name.01@gmail.com, qui est le modèle habituel d’une chaîne de courrier électronique.
En combinant tous les éléments ci-dessus, nous pouvons voir que nous recherchons une chaîne d’identifiant de courrier électronique. Nous pouvons maintenant utiliser cette expression pour valider n’importe quelle adresse électronique. Si l’identifiant de l’email testé correspond à ce modèle, nous pouvons dire qu’il s’agit d’un identifiant valide.
P.S.– Il s’agit d’un modèle pour les identifiants d’email les plus courants sur le web.
Types de jetons
De nombreux jetons peuvent être utilisés dans diverses combinaisons au sein d’une Regex pour décrire une grande variété d’expressions. Nous allons examiner ci-dessous les différents types de jetons utilisés dans les expressions régulières. En outre, nous allons également examiner les jetons les plus couramment utilisés dans chaque catégorie.
Les tokens de base
Commençons par les jetons de base. Ces jetons sont utilisés dans presque toutes les expressions régulières. C’est pourquoi nous devons d’abord apprendre à les connaître.
Jeton | Signification |
\r |
Correspond au caractère de retour chariot. |
\0 |
Correspond au caractère nul. |
\n |
Recherche une nouvelle ligne. |
\t |
Ce caractère correspond à une tabulation. |
Classes de caractères
Passons maintenant aux jetons de caractères. Ils sont utilisés pour faire correspondre les alphabets, les nombres et d’autres caractères spéciaux.
Jeton |
Signification |
a |
Il s’agit d’une correspondance littérale avec le caractère a. De même, tous les alphabets et les chiffres utilisés isolément correspondent au caractère spécifique lui-même. |
abc |
Il correspond à la chaîne de caractères abc. |
[abc] |
Recherche d’un seul caractère parmi a, b ou c. |
[^abc] |
Cette fonction permet de rechercher n’importe quel caractère à l’exception de a, b ou c. |
[a-z] |
Un caractère minuscule compris entre a et z |
[^a-z] |
Tout caractère n’appartenant pas à la plage de a à z. Cela inclut également les majuscules. |
[A-Z] |
Un caractère majuscule compris entre A et Z. |
[^A-Z] |
Un caractère non compris entre A et Z. |
[0-9] |
Tout nombre compris entre 0 et 9 |
[^0-9] |
Un caractère non compris entre 0 et 9 |
[a-zA-Z0-9] |
Ceci correspond à un caractère qui peut être une minuscule comprise entre a et z ou tout caractère compris entre A et Z ou tout nombre compris entre 0 et 9 |
[^a-zA-Z0-9] |
Tout caractère qui n’entre pas dans la catégorie précédente. |
. |
Tout caractère unique |
\s |
Sert à rechercher tout caractère d’espacement. |
\S |
Sert à rechercher tout caractère autre qu’un espace blanc. |
\d |
Permet de rechercher n’importe quel chiffre |
\D |
Recherche d’un caractère autre qu’un chiffre |
\w |
Correspond à n’importe quel caractère d’un mot |
\W |
Correspond à n’importe quel caractère non verbal |
$ |
Indique la fin d’une chaîne de caractères |
\b |
Correspond à une limite de mot |
\B |
Il est utilisé pour correspondre à une limite de non-mot |
Quantificateurs
Cette classe spéciale de jetons est utilisée pour indiquer le nombre d’occurrences consécutives d’un caractère, d’une chaîne de caractères ou d’un nombre. Ils sont utilisés en conjonction avec les autres jetons.
Examinons quelques quantificateurs courants.
Jetons |
Signification |
a ? |
Ceci correspond à zéro ou une occurrence de a. |
a* |
Ceci correspond à zéro ou plusieurs occurrences (consécutives) de a. |
a |
Ceci correspond à au moins une ou plusieurs occurrences consécutives de a. |
a{5} |
Ce champ recherche exactement cinq occurrences consécutives de la lettre a. |
a{5, } |
Ce champ recherche au moins cinq occurrences consécutives de la lettre a. |
a{5, 7} |
Cette fonction permet de rechercher un nombre quelconque de lettres a consécutives comprises entre 5 et 7. |
Groupes
Comme leur nom l’indique, ces jetons sont regroupés.
Jetons |
Signification |
(…) |
Ceci capture tout ce qui se trouve entre les parenthèses. |
(a|b) |
Ceci correspond à a ou b. |
(? :…) | Correspond à tout ce qui est compris entre les parenthèses |
( ?(1)yes|no) |
Ceci correspond à une déclaration conditionnelle. |
Drapeaux
Il s’agit d’instructions spéciales données au moteur de recherche de motifs lors de la recherche d’une correspondance.
Jetons | Signification |
g |
Correspondance globale. Cette fonction permet d’effectuer une recherche jusqu’à ce que le moteur de recherche ne trouve plus de correspondance, c’est-à-dire jusqu’à la fin de la chaîne ou du groupe de chaînes donné(e). |
m |
Correspondance multiligne, c’est-à-dire ligne par ligne. |
x |
Indique au moteur d’ignorer les espaces blancs lors de la recherche. |
X |
Cette option est utilisée pour les correspondances étendues. |
s |
Correspond à une seule ligne. |
i |
Cette option est utilisée pour une recherche insensible à la casse. |
u |
Pour les caractères Unicode. |
Ancres
Instructions supplémentaires pour le moteur concernant les positions.
Jetons |
Signification |
^ |
Indique le début d’une chaîne de caractères |
\A |
Indique également le début d’une chaîne de caractères |
\Z |
Le symbole de la fin d’une chaîne de caractères. |
\z |
Le symbole de la fin absolue d’une chaîne de caractères. |
\G |
Il s’agit du début d’une correspondance. |
Expressions régulières couramment utilisées
Les expressions régulières sont largement utilisées sur l’internet. Qu’il s’agisse de valider des formulaires ou de rechercher des données contenant un ou plusieurs mots-clés particuliers, les expressions régulières sont presque indissociables des applications informatiques modernes.
Examinons quelques exemples familiers d’utilisation des expressions régulières.
Correspondance avec un numéro de téléphone
Voyons quel est le modèle d’un numéro de téléphone utilisé en Inde. L’indicatif de pays vient en premier. Il contient généralement le caractère ” ” suivi du chiffre 91, qui est l’indicatif de pays de l’Inde. En outre, les numéros de téléphone indiens commencent généralement par 6, 7, 8 ou 9. Ce chiffre est ensuite suivi de 9 autres chiffres.
Une expression rationnelle valide pour un numéro de téléphone portable indien serait donc la suivante.
^(\ 91[\-\s]?)?[0]?(91)?[6-9]\d{9}$
Tester la force des mots de passe
La plupart des sites web nous recommandent de fournir un mot de passe fort qui contient une combinaison de chiffres, de caractères majuscules et minuscules et de symboles. Il doit également comporter un nombre minimum de caractères – 6 ou 8. Cela permet de rendre le mot de passe très difficile à déchiffrer.
Tout mot de passe respectant cette règle peut être généré ou validé pour sa force à l’aide d’une expression régulière.
^(((?=.*[a-z])(?=.*[A-Z]))|((?=.*[a-z])(?=.*[0-9]))|((?=.*[A-Z])(?=.*[0-9])))(?=.{6,})
Correspondance des URL
Les URL sont le moyen le plus courant d’utiliser l’internet et de visiter rapidement la page web souhaitée. Presque tous les sites web ont une URL. Par conséquent, chaque URL est standardisée et suit un modèle défini. Chaque URL suit le protocole HTTP ou HTTPs, suivi de “://” et souvent de“www“. Ensuite, le nom du site web est suivi d’un .com ou d’un .net ou d’un .org, etc.
Pour tester la validité d’une URL, nous pouvons utiliser une expression rationnelle comme celle présentée ci-dessous.
https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\ ~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\ .~#?&//=]*)
Formats de date et d’heure
Les formats de date et d’heure sont également très couramment utilisés sur le web. Il existe de nombreux formats de dates utilisés par diverses applications, logiciels ou systèmes. Les dates doivent toujours être utilisées dans un format qui les rend utilisables par l’utilisateur ou l’application qui tente de les lire.
Une date au format jj-mm-aaaa peut être validée à l’aide d’une expression régulière qui peut être la suivante.
^(1[0-2]|0[1-9])/(3[01]|[12][0-9]|0[1-9])/[0-9]{4}$
Maintenant, explorons certains des outils RegEx en ligne qui peuvent être pratiques pour construire et dépanner.
Si vous souhaitez en savoir plus sur les expressions régulières, leurs exemples et leurs utilisations avancées, voici une liste de sites web auxquels vous pouvez toujours vous référer :
Regex101
Regex101 est un excellent guide de référence et un outil interactif pour créer vos expressions régulières, il peut vous aider à démarrer très rapidement avec les expressions régulières.
En l’utilisant, nous pouvons tester RegEx pour les langages suivants.
- PCRE (PHP)
- ECMAScript (JavaScript)
- Python
- GoLang
Il prend en charge les fonctionnalités de RegEx telles que la correspondance, la substitution et les tests unitaires. En outre, il est possible de sauvegarder les anciens RegEx testés.
FreeFormatter
FreeFormatter est basé sur JavaScript et utilise la bibliothèque XRegExp pour des fonctionnalités améliorées. Il facilite le test d’un RegEx par rapport à une correspondance ainsi que le remplacement d’une correspondance. Il prend en charge les drapeaux suivants, qui peuvent être utilisés en fonction des besoins lors du test d’un RegEx
- i – Insensible à la casse
- m – multiligne
- g – Global (ne s’arrête pas à la première correspondance)
- s – Le point correspond à toutes les correspondances INCLUANT les sauts de ligne (XRegExp uniquement).
Mots croisés Regex
Si les Regex et les puzzles vous intéressent, c’est le site qu’il vous faut. Il propose une série d’énigmes amusantes et interactives. Ils vous aideront certainement à en apprendre davantage sur les expressions régulières.
- Optimisé pour les téléphones et la résolution de puzzles RegEx en déplacement.
- Un tutoriel pas à pas vous apprend les différents symboles et modèles RegEx.
- Faites travailler votre esprit sur des puzzles RegEx cubistes en 2D et palindromes.
- Un large éventail de puzzles RegEx avec des difficultés allant du débutant à l’expert.
RegExr
RegExr est un site web qui vous permet de vous salir les mains avec Regex. Vous pouvez écrire des regex, faire correspondre des motifs et vous amuser avec cet équivalent Codepen des expressions régulières.
Caractéristiques
- Prend en charge JavaScript et PHP/PCRE RegEx.
- Les résultats sont mis à jour en temps réel au fur et à mesure que vous tapez.
- Survolez une correspondance ou une expression pour obtenir des détails.
- Validez les modèles avec des suites de tests.
- Sauvegardez et partagez des expressions avec d’autres.
- Référence RegEx complète avec aide et exemples.
Pythex
Il s’agit d’un testeur d’expressions régulières basé sur Python. Pythex est un moyen rapide de tester vos expressions régulières en Python. Il est livré avec quatre drapeaux, à savoir
- Ignorer la casse
- Multiligne
- DotAll
- Verbeux
Rubular
Rubular est un éditeur d’expressions régulières basé sur Ruby. Il supporte et utilise la version 2.5.7 de Ruby.
Debuggex
Il est basé sur JavaScript et prend en charge les RegEx pour Python et les expressions régulières compatibles avec Perl (PCRE). En utilisant cet outil en ligne, nous pouvons intégrer nos RegEx à StackOverflow. Il permet de partager les résultats des RegEx en créant un lien unique pour chaque test RegEx.
ExtendsClass
ExtendsClass est une boîte à outils pour les développeurs. Il fournit un support de test RegEx pour les langages suivants.
- JavaScript
- Python (3.4)
- Ruby (2.1)
- Java (JDK 14)
- PHP (7)
Testeur RegEx
Ce testeur gratuit d’ expressions régulières vous permet de tester vos expressions régulières par rapport à n’importe quelle entrée de votre choix et met clairement en évidence toutes les correspondances. Vous pouvez ainsi sauvegarder l’ancienne RegEx testée pour une référence ultérieure. En outre, il prend en charge les RegEx JavaScript et PCRE.
Web ToolKit
Web Toolkit contient un ensemble d’outils utilitaires, dont le testeur de RegEx. Nous pouvons y saisir notre RegEx et le tester par rapport à une valeur. Il permet également de remplacer, de faire correspondre et de copier les expressions. En outre, il permet d’effectuer une correspondance globale ou sensible à la casse.
Ressources pédagogiques
Si vous souhaitez apprendre RegEx, voici quelques-uns des meilleurs cours disponibles en ligne.
Coursera
Coursera propose des cours intéressants sur des projets guidés qui vous permettront d’acquérir une expérience pratique de l’utilisation de RegEx. La plupart de ces cours durent environ une heure et vous travaillerez étape par étape avec l’instructeur. Voici quelques-uns des meilleurs projets RegEx.
- Expressions régulières en Python
- Extraction de données textuelles avec Java et RegEx
- Extraction de données textuelles avec Bash et RegEx
Udemy
Udemy propose un cours RegEx complet pour les débutants qui vous enseigne les bases en 3,5 heures et un cours RegEx Python avec projets qui vous donnera une expérience pratique de l’utilisation de RegEx pour la validation des entrées, le traitement et la transformation des données.
Conclusion
Nous avons appris les expressions régulières, quelques exemples courants et certains outils de test en ligne. Avec ces connaissances, nous pouvons créer nos expressions régulières et les utiliser dans nos applications.