Outils pour utilisateurs

Outils du site


developpement:regex:introduction

Expressions régulières

Utilisées en PHP, Perl, C#, etc, les expressions régulières peuvent être utilisées pour valider des chaînes de caractère. Ce sont des masques qui permettent la bonne saisie des utilisateurs dans un formulaire, par exemple. Voici quelques exemples (pour plus d'explications, des sites existent à cet effet1)) :

Type de chaîne à traiter Regex
Nom ^[a-zA-Zéèêëàâïç'.\s]{2,40}$
Nom (anglais, sans accents) ^[a-zA-Z'.\s]{2,40}$
Courriel \w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
Adresse URL http(s)?://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?
Téléphone ((\(\d{3}\) ?)|(\d{3}-))?\d{3}-\d{4}

Éléments d'une expression2) :

Code Description
\ Marque le caractère suivant comme caractère spécial ou littéral. Par exemple, n correspond au caractère n. \n correspond à un caractère de nouvelle ligne. La séquence \\ correspond à \, tandis que \( correspond à (.
^ Correspond au début de la saisie.
$ Correspond à la fin de la saisie.
* Correspond au caractère précédent zéro fois ou plusieurs fois. Ainsi, zo* correspond à z ou à zoo.
+ Correspond au caractère précédent une ou plusieurs fois. Ainsi, zo+ correspond à zoo, mais pas à z.
? Correspond au caractère précédent zéro ou une fois. Par exemple, a?ve? correspond à ve dans lever.
. Correspond à tout caractère unique, sauf le caractère de nouvelle ligne.
(modèle) Correspond au modèle et mémorise la correspondance. La sous-chaîne correspondante peut être extraite de la collection obtenue, à l'aide d'Item [0]…[n]. Pour trouver des correspondances avec des caractères entre parenthèses ( ), utilisez \( ou \).
x|y Correspond soit à x soit à y. Par exemple, z|foot correspond à z ou à foot. (z|f)oot correspond à zoo ou à foot.
{n} n est un nombre entier non négatif. Correspond exactement à n fois le caractère. Par exemple, o{2} ne correspond pas à o dans Bob, mais aux deux premiers o dans fooooot.
{n,} n est un entier non négatif. Correspond à au moins n fois le caractère. Par exemple, o{2,} ne correspond pas à o dans Bob, mais à tous les o dans fooooot. o{1,} équivaut à o+ et o{0,} équivaut à o*.
{n,m} m et n sont des entiers non négatifs. Correspond à au moins n et à au plus m fois le caractère. Par exemple, o{1,3} correspond aux trois premiers o dans foooooot et o{0,1} équivaut à o?.
[xyz] Jeu de caractères. Correspond à l'un des caractères indiqués. Par exemple, [abc] correspond à a dans plat.
[^xyz] Jeu de caractères négatif. Correspond à tout caractère non indiqué. Par exemple, ''[^abc]'' correspond à p dans plat.
[a-z] Série de caractères. Correspond à tout caractère dans la série spécifiée. Par exemple, [a-z] correspond à tout caractère alphabétique minuscule compris entre a et z.
[^m-z] Série de caractères négative. Correspond à tout caractère ne se trouvant pas dans la série spécifiée. Par exemple, ''[^m-z]'' correspond à tout caractère ne se trouvant pas entre m et z.
\b Correspond à une limite représentant un mot, autrement dit, à la position entre un mot et un espace. Par exemple, er\b correspond à er dans lever, mais pas à er dans verbe.
\B Correspond à une limite ne représentant pas un mot. en*t\B correspond à ent dans bien entendu.
\d Correspond à un caractère représentant un chiffre. Équivaut à [0-9].
\D Correspond à un caractère ne représentant pas un chiffre. Équivaut à [^0-9].
\f Correspond à un caractère de saut de page.
\n Correspond à un caractère de nouvelle ligne.
\r Correspond à un caractère de retour chariot.
\s Correspond à tout espace blanc, y compris l'espace, la tabulation, le saut de page, etc. Équivaut à [ \f\n\r\t\v].
\S Correspond à tout caractère d'espace non blanc. Équivaut à [^ \f\n\r\t\v].
\t Correspond à un caractère de tabulation.
\v Correspond à un caractère de tabulation verticale.
\w Correspond à tout caractère représentant un mot et incluant un trait de soulignement. Équivaut à [A-Za-z0-9_].
\W Correspond à tout caractère ne représentant pas un mot. Équivaut à [^A-Za-z0-9_].
\num Correspond à num, où numest un entier positif. Fait référence aux correspondances mémorisées. Par exemple, (.)\1 correspond à deux caractères identiques consécutifs.
\n Correspond à n, où n est une valeur d'échappement octale. Les valeurs d'échappement octales doivent comprendre 1, 2 ou 3 chiffres. Par exemple, \11 et \011 correspondent tous les deux à un caractère de tabulation. \0011 équivaut à \001 & 1. Les valeurs d'échappement octales ne doivent pas excéder 256. Si c'était le cas, seuls les deux premiers chiffres seraient pris en compte dans l'expression. Permet d'utiliser les codes ASCII dans des expressions régulières.
\xn Correspond à n, où n est une valeur d'échappement hexadécimale. Les valeurs d'échappement hexadécimales doivent comprendre deux chiffres obligatoirement. Par exemple, \x41 correspond à A. \x041 équivaut à \x04 & 1. Permet d'utiliser les codes ASCII dans des expressions régulières.

Exemples

Negative lookbehind

Si par exemple on veut un certain match (ex: un d suivi d'un chiffre), mais sans qu'il y ait un certain autre match, on peut utiliser un negative lookbehind: (?<!pattern).

Ici:

/(?<!PRE_.+_)(d\d+)/

PRE_pattern_d51_ # pas de match
pattern_d51_     # match 'd51'
_d35             # match 'd35'
PRE_d34_         # match 'd34' vu qu'il n'y a pas d'autres caractères suivant le 'PRE_'
developpement/regex/introduction.txt · Dernière modification : 2022/11/08 18:56 de sgariepy