Outils pour utilisateurs

Outils du site


regex

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
regex [2014/04/09 20:08]
luc
regex [2018/10/13 20:32] (Version actuelle)
Ligne 3: Ligne 3:
 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]]. 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]].
  
-=== Principe === 
  
-//TBD// +=== Récapitulatif ===
- +
-=== Eléments des regex ===+
  
 ^  élément  ^  signification  ^ ^  élément  ^  signification  ^
 +| |  **Positionnement**  |
 |  %%^%%  |  début de la chaîne  | |  %%^%%  |  début de la chaîne  |
-|     un caractère, quelqu'il soit   |+|    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, 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, zéro ou une fois  |
 |  +  |  répétition du motif précédent, une ou plusieurs fois  | |  +  |  répétition du motif précédent, une ou plusieurs fois  |
-|  ( )  Permet de délimiter un motif à évaluer en priorité  | +|  {N}   répétition du motif précédent N fois  | 
- %%|%%  |  permet une alternative entre ce qui est d'un côté ou de l'autre  | +| |  **Structurants**  | 
-|   |  permet d'échapper un caractère spécial normalement utilisé pour décrire une regex (ex: . * )  |+|  ( )  |  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é)  | |  [ ]  |  définit une classe, ce qui correspond à un motif dans le motif (voir le paragraphe dédié)  |
-|  $  |  fin de la chaîne  |+|  %%|%%  |  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)  | |  \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 === === 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.
 +
 +<code bash>
 +perl-rename -n 's/regex1/regex2/' fichier
 +</code>
 +
 +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)
  
-//TBD//+Bref, c'est encore à développer
regex.1397074100.txt.gz · Dernière modification: 2018/10/13 20:32 (modification externe)