Utiliser les expressions régulières

J’ai fait un petit pense-bête sur les expressions régulières. Je le partage avec vous, ça peut aider :wink:

N’hésitez pas à me dire si vous avez des améliorations à me suggérer ou si vous trouvez des erreurs à corriger.


Une expression régulière (ou expression normale ou expression rationnelle) est, en informatique, une chaîne de caractères, que l’on appelle parfois un motif, qui décrit, selon une syntaxe précise, un ensemble de chaînes de caractères possibles.

Les expressions régulières sont issues des théories mathématiques des langages formels des années 1940. Les expressions régulières sont aujourd’hui utilisées par les informaticiens dans l’édition et le contrôle de texte ainsi que dans la manipulation des langues formelles que sont les langages informatiques. (Wikipedia)

Construction d’une expression régulière
Une expression régulière est une suite de caractères typographiques (qu’on appelle plus simplement « motif » – « pattern » en anglais) décrivant un ensemble de chaînes de caractères. Les mécanismes de base pour former de telles expressions sont basés sur des caractères spéciaux de substitution, de groupement et de quantification.

Une expression régulière commence et se termine par /

A la fin une ou plusieurs option de recherche :
g Global : retourne tous les résultats (ne s’arrête pas après avoir trouvé une occurrence)
m Multiligne : utilise « ^ » et « $ » pour rechercher au début et à la fin de chaque ligne
i Insensible : insensible à la casse
y Sticky :
u Unicode :

/gris/g ----> La nuit tous les chats sont gris.

Par défaut, les expressions régulières sont sensibles à la case.
/La/g ----> La vie la nuit…

Classes de caractères
Caractères de mise en forme
\t Tabulation horizontale.
\n Saut de ligne.
\v Tabulation verticale.
\f Saut de page.
\r Retour chariot.

Classes de caractères
\w Caractère alphanumérique [A-Za-z0-9_]
\W Caractère non alphanumérique [^A-Za-z0-9_]
\d Caractère numérique [0-9]
\D Caractère non numérique [^0-9]
\s Espace au sens large [ \t\n\r\f]
\S Caractère qui n’est pas un espace au sens large [^ \t\n\r\f]

Caractères spéciaux opérateurs
Les symboles dotés d’une sémantique particulière peuvent être appelés « opérateurs », « métacaractères » ou « caractères spéciaux ». Les caractères qui ne représentent qu’eux mêmes sont dits « littéraux ».

| Choix multiples (ou)
La barre verticale permet de spécifier plusieurs possibilités
/gris|gras/g ----> La nuit tous les chats sont gris, mais pas forcement gros ou gras.

\ Séquence d’échappement
Comme les caractères ( , ), [ , ], . , * , ? , + , ^ , | , $ , - et \ sont utilisés comme symboles spéciaux, ils doivent être référencés dans une séquence d’échappement s’ils doivent désigner littéralement le caractère correspondant. Ceci se fait en les précédant avec une barre oblique inversée \ .

Caractères spéciaux de substitution
. Le point
Le point est utilisé pour spécifier n’importe quel caractère à l’exception des retours à la ligne (retour chariot \r)
/gr.s/g ----> La nuit tous les chats sont gris, mais pas forcement gros ou gras.

Caractères spéciaux de groupement
( ) Les parenthèses
Les parenthèses sont utilisés pour délimiter un groupe (avec capture).
/les chats sont (gris)/g ----> La nuit tous les chats sont gris.

Capture des groupements
La capture des groupements permet de réutiliser un groupement entré en correspondance pour un traitement ultérieur, par exemple une substitution. Dans la plupart des syntaxes, il est possible d’accéder au même groupement capturé par la syntaxe « $n », où n est un entier.

Groupements non capturants
Lorsqu’elle est implémentée, la capture des groupements est souvent le comportement par défaut. Comme elle a un coût algorithmique important, il est parfois possible de désactiver la capture de certains groupements. On peut par exemple citer la syntaxe « (?:groupement) ».
/les chats sont (?:gris)/g ----> La nuit tous les chats sont gris.

[ ] Les crochets
Les crochets sont utilisés pour la spécification de classe de caractères à rechercher.
/gr[io]s/g ----> La nuit tous les chats sont gris, mais pas forcement gros ou gras.

Le tirets à l’intérieur des crochets spécifie un intervalle de recherche
[a-z] ----> Indique une lettre dans l’intervalle de « a » à « z »

Le tirets à l’intérieur des crochets spécifie un intervalle de recherche
[a-zA-Z_] ----> Une lettre de « a » à « z » ou de « A » à « Z » ou un tiret bas « _ »

L’accent circonflexe à l’intérieur des crochets et avant les caractères, spécifie une négation
[^abc] ----> Pas de « a », ni de « b », ni de « c »

Caractères spéciaux d’ancrage
^ Ancrage au début
L’utilisation de l’accent circonflexe permet de spécifier que la chaîne de caractère recherchée doit être placé au début de la chaîne
/^ballon/i ----> Ballon bleu ou un ballon jaune

$ Ancrage à la fin
L’utilisation du caractère dollars permet de spécifier que la chaîne de caractère recherchée doit être placé à la fin de la chaîne
/jaune$/i ----> Une balle jaune ou un ballon jaune

Caractères spéciaux de quantification
{ } Les accolades
Les accolades permettent de grouper un nombre d’occurrences
a{3} ----> Exactement trois occurrences de « a »

On peut aussi spécifier un nombre minimum d’occurrences
a{3,} ----> Au moins trois et autant d’occurrences de « a » que disponible

On peut aussi spécifier une plage d’occurrences
a{3,5} ----> Entre trois et cinq « a »

* L’étoile
Quantificateur pour zéro, une ou plusieurs occurrences de ce qui précède ; équivaut à {0,}.

? Le point d’interrogation
Quantificateur pour au plus une occurrence de ce qui précède ; équivaut à {0,1}.

+ Le plus
Quantificateur pour une ou plusieurs occurrences de ce qui précède ; équivaut à {1,}.

La gourmandise
Par défaut, les quantificateurs « + » et « * » recherchent la plus grande séquence correspondant au motif recherché : on dit qu’elle est « gourmande ».
/Aa+/g ----> Reconnaît la totalité de la chaîne « Aaaaaaa » plutôt qu’une partie « Aaa »

En ajoutant un point d’interrogation après ces quantificateurs, permet à l’inverse de rechercher la plus petite séquence correspondante.
/Aa+?/g ----> Reconnaît seulement la partie « Aaa » de la chaîne « Aaaaaaa »

Expressions régulières utiles
Adresse de courrier électronique
/^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$/

Site internet
/^www\.[a-z0-9._-]{2,}\.[a-z]{2,4}$/

Numéro de téléphone (10 chiffres – Français)
/^0[1-9]([-. ]?[0-9]{2}){4}$/

4 « J'aime »

Merci beaucoup Fabrice pour avoir partagé ceci, je pense que ça va être utile à beaucoup de monde :slight_smile: Rien que les 3 exemples de la fin sont presques obligatoires dans la plupart des apps !

Super Fabrice, merci à toi. :slight_smile: