 expressions rationnelles posix introduction les expressions rationnelles  regular expressions  sont un moyen très puissant de faire des recherches et des séléctions sur du texte concretement ce sont des chaînes de caractères contenant des marqueurs et différents caractères spéciaux des sortes de jokers qui definissent à quoi une expression rationnelle doit correspondre on dit qu une expression rationnelle correspond  match  à une chaîne lorsque cette chaîne répond aux critères de l expression  pattern  même si les expressions rationnelles paraissent compliquées illisibles et rébarbatives la syntaxe est suffisemment accessible et avec un peu de pratique vous verrez le temps gagné par rapport à l utilisation des nombreuses fonctions textuelles classiques  strpos strchr strreplace   i commençons par le début les exemples de cette partie sont tous faits avec l utilitaire gnu grep  voir à la fin pour les fichiers d exemples la bonne nouvelle c est que l expression régulière toto correspond à la chaîne toto  exemple 11   grep color toto 11 toto va l école le meilleur c est toto explication  grep options expressionrationnelle fichier grep affiche toutes les lignes du fichier passé en paramètre ou de l entrée standard qui contiennet au moins une correspondance à l exprression rationnelle passée en paramètre l option mdash color permet de mettre en surbrillance le texte qui correspond à l expression rationnelle voici les deux premiers marqueurs auxquels nous allons nous intéresser lorsqu il est placé devant l expression rationnelle signifie que la corresondance doit débuter la chaîne le lorsqu il se trouve à la fin de l expression rationnelle signifie que la corresponance doit clore la chaîne de caractères exemple 12   grep color toto 11 toto va l école exemple 13   grep color toto 11 le meilleur c est toto explication  lorsque l expression régulière contient des espaces ou des caractères spéciaux il est conseillé de la mettre entre guimmet simples ou doubles qu il faudra échapper d un slash à l ntérieur de l expression rationnelle donc la seule chaîne pouvant contenir une correspondance à l expression toto est la chaîne toto  remarque  grep considère chaque ligne comme une nouvelle chaîne à analyser à chaque ligne on retrouve donc un au début et un à la fin ii jokers et listes le point a un sens particulier dans les expressions régulières il représente un caractère quelconque si vous souhaitez trouver un point avec une expression rationnelle il faudra l échapper ou l entourer de crochets  exemple 21   grep color tt 21 toto tata tito de ce fait il faut faire attention dans vos scripts shell dans le classique  grep truccom le point ne représente pas le point mais n importe quoi les crochets définissent une liste de caractères recherchés aou correspond à a o ou u on peut aussi définir une rangée de caractères avec un tiret az 09 si vous voulez placer un tiret dans une liste sans son sens particulière il faut le mettre en début de la liste az correspond à un caractère de a à z ou à un tiret les rangées définies avec le tiret se font par les codes numériques des caractères alors il faut faire très attention à ce qu on y met au risque d avoir des résultat imprévisibles exemple 22   grep color t oi 21 to to ti to la norme posix propose pas mal de listes prédéfinies ce qui allège pas mal les expressions rationnelles alnum caractères alphanumériques équivalent à azaz09 alpha caractères alphabétiques azaz blank caractères blanc espace tabulation ctrl caractères de contrôle les premiers du code ascii digit chiffre 09 graph caractère d imprimerie qui fait une marque sur l écran en quelque sorte print caractère imprimable qui passe à l imprimante tout sauf les caractères de contrôle punct caractère de ponctuation space caractère d espacement upper caractère majuscule xdigit caractère hexadécimal attention   alpha ou azaz n inclut pas les caractères accentués français  attention  certaines implémentations des expressions régulières notamment le php n acceptent pas classeposix en tant que liste valide mais comme un élément de liste il faudra utiliser classe on peut faire une liste avec négation en plaçant comme premier élément cela voudra dire que tout caractère est accepté sauf ceux listés exemple 23   grep color t a 21 to to ti to tu x ces nouveaux jouets donnent de nouveaux caractères à échapper si vous ne voulez pas les utiliser avec leur sens spécial s écrira et ca marche même dans des listes  iii les quantifieurs un autre aspect très import est de définir combien de fois on veut voir un caractère ou une des possibilités d une liste répété par défaut chaque caractère à un quantifieur 1 un quantifieur suit le caractère et se place entre accolades on peut y mettre un chiffre ou une rangée de chiffres voici quelques exemples a 2 correspond à deux lettres a consecutives donc à l expression aa ab 24 signifie qu on veut un a suivi de 2 3 ou 4 lettres b ab 2 signifie qu on veut un a suivi de 2 b ou plus certains quatifieurs très utilisés ont des noms plus courts il faudra les échapper zéro ou plusieurs zéro ou un un ou plusieurs  exemple 31   grep color a 2 31 abbb explications  par defaut grep utilise les expressions regulières posix dites de base bre en bre pour que les accolades les parenthèses et les pipes prennent leur sens spécial il faudra les échapper si cela alourdit trop les expressions vous pouvez forcer grep à utiliser les expression posix étendues ere avec l option e ou alors en utilisant egrep qui est un alias de grep e et ne plus avoir à les échapper ces quantifieurs posent un problème qu est la gourmandise des expressions régulières dans l exemple on voit qu il suffit 2 b alors que tous les 3 correspondent il y a donc deux possibilités de correspondance abb et abbb la norme posix dit que la gourmandise est maximale ca signifie concrètement que si plusieurs correspondances sont possibles c est la plus longue qui est prise iv les ancres et les références on définit un ancre avec des parenthèses en encadrant une partie de l expression régulière d un ancre on peut y faire référence soit dans l expression rationnelle même backreference soit dans une chaîne de remplacement avec des outils tels que sed pour faire un référence on échappe simplement son numéro d un backslash l ancre 0 correspond à toute la correspondance très dangereux pour une backrefrence car peut engendrer une boucle récursive infinie 1 à la première parenthèse ouverte etc exemple 41   grep color t t 1 21 toto tata explication  on cherche des correspondances avec t n importe quelle lettre t la même lettre que celle d avant toto et tata correspondent mais pas tito les parenthèses permettent également de donner des variantes d une expression rationnelle ou d une partie de l expression régulière expression1 expression2 expressionn  exemple 42   grep e color t o x to x 21 toto tux j ai volontairement utilisé grep e pour montrer qu avec e il ne faut pas échapper les parenthèses et les if faut savoir que presque toutes les implémentations des expressions rationnelles utilisent maintenant les ere par défaut il est donc conseillé sous shell d utiliser egrep lorsqu on veut effectuer des recherches par expression rationnelle et grep pour des recherches de simple texte en n oubliant pas d échapper les points pour qu ils perdent leur sens spécial  remarque  on peut aussi placer un quantifieur à un groupe entre parenthèses les fichiers des exemples 11 toto va l école le meilleur c est toto 21 toto tata tito tux 31 abbb expressions rationnelles posix dans l exemple 42 il faut mettre grep e mdash color t o u to x et non grep e mdash color t o x to x sinon bon article  expressions rationnelles posix article très intéressant et accessible par contre on écrit guillemets   grep  