===== 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