Outils pour utilisateurs

Outils du site


regex

Regex ou relations rationnelles

Dans ce chapitres, il ne s'agit pas d'une conf, mais d'un outil qui est utilisé ici où là, notamment dans la conf de nginx.

Récapitulatif

élément signification
Positionnement
^ début de la chaîne
$ fin de la chaîne
Quantificateurs
* répétition du motif précédent, zéro, une ou plusieurs fois
? répétition du motif précédent, zéro ou une fois
+ répétition du motif précédent, une ou plusieurs fois
{N} répétition du motif précédent N fois
Structurants
( ) Permet de délimiter un motif à évaluer en priorité
[ ] définit une classe, ce qui correspond à un motif dans le motif (voir le paragraphe dédié)
| permet une alternative entre ce qui est d'un côté ou de l'autre
Spéciaux
. un caractère, quelqu'il soit
\ permet d'échapper un caractère spécial normalement utilisé pour décrire une regex: ^$*?+{}()[]|.\!
! euh
Les raccourcis
\d indique un chiffre = [0-9]
\D indique ce qui n'est pas un chiffre
\w indique un caractère alphanumérique = [a-ZA-Z0-9_]
\W indique ce qui n'est pas un caractère alphanumérique (le contraire de \w)
\t indique une tabulation
\n indique une nouvelle ligne
\r indique un retour chariot
\s indique un espace blanc
\S tout caractère qui n'est pas un whitespace (=espace) (testé en python)

Principe

Le concept est de permettre la sélection d'éléments au sein d'une chaîne alphanumérique au sens large. C'est très utilisé pour vérifier si une chaine a un format convenable (email dans un formulaire web, dans ce cas, on se concentre sur la présence d'un motif/formatage particulier avec retour d'un booléen), ou encore pour effectuer des remplacements (commande perl-rename dans archlinux).

Classes

alternative

Une classe est délimité par des [ ]. N'importe quoi contenu dans la classe peut convenir. Par exemple : [aeiouy] permet de sélectionner (matcher) une voyelle.

plage

On peut aussi définir des intervalles avec -, [3-6] définit un chiffre compris entre 3 et 6 inclus.

On peut cumuler la notion de plage avec la notion d'alternative : [a-zA-Z] pour définir une lettre en majuscule ou en minuscule.

négation dans une classe

Elle est marquée par le caractère ^. : [^a-z] pour définir qque chose qui ne contient aucune lettre en minuscule.

échappement

Dans une classe, l'échappement \ ne doit pas être utilisé devant un caractère spécial d'une regex (^$*?+{}()[]|.\!) sauf ] car on s'en sert pour fermer la classe, et sauf - et ^dont on se sert dans la définition des classes.

Quantificateurs

?, +, *. S'appliquent au motif précédent, que ce soit une classe, un groupe ou juste une lettre. Dans chiens?, le ? ne s'applique qu'au s, donc définit un chien ou des chiens.

Les { } peuvent être aussi utilisées pour déterminer le nombre exact de répétition. [0-9]{4} sert à définir une date comme 1789, mais pas 495 (n'a que 3 chiffres).

Groupes

Dans certaines applications, la commande perl-rename pour ne pas la nommer, on remplace des bouts de chaînes par d'autres.

perl-rename -n 's/regex1/regex2/' fichier

On peut vouloir réutiliser des bouts de chaines sélectionnés dans la regex2. Dans ce cas, il faut former des groupes à l'aide des ( ), qu'on peut réutiliser dans la seconde regex avec $1 $2, $1 correspondant au premier groupe, etc..

Assertions

Il s'agit de test qui sont effectués sur les caractères précédents ou suivant les caractères en cours d'étude, et ne font pas partie de la sélection.

b(?=[a-zA-Z]) est positif si la lettre b est suivie par une autre lettre
b(?![0-9]) est positif si la lettre b n'est pas suivie d'un nombre (assertion négative)

Bref, c'est encore à développer

regex.txt · Dernière modification : 2018/10/13 20:32 de 127.0.0.1