Loading

NOM

       regex - Expressions rationnelles POSIX.2

       Les  expressions  rationnelles  (« ER »), définies par POSIX.2 existent
       sous deux formes : les ER modernes  (en  gros  celles  de  egrep ;  que
       POSIX.2  appelle  expressions  rationnelles  « étendues »),  et  les ER
       obsolètes (en gros celles de ed(1) ; les  ER  basiques  pour  POSIX.2).
       [NDT :   Le   terme   « officiel »  pour  la  traduction  de  « Regular
       expression »  est  «expression  rationnelle »,  et  c’est   celui   que
       j’emploierai.  Toutefois,  on  utilise couramment le terme « expression
       régulière », même s’il s’agit d’un  léger  abus  de  langage.]  Les  ER
       obsolètes  existent  surtout  à  titre  de compatibilité avec d’anciens
       programmes ; on en parlera à la fin. POSIX.2 laisse  de  côté  certains
       aspects  syntaxiques  et  sémantiques des ER ; un signe « (!) » indique
       une interprétation  qui  peut  ne  pas  être  totalement  portable  sur
       d’autres implémentations de POSIX.2.

       Une  ER  (moderne)  est  une(!)  ou  plusieurs  branches  non-vides(!),
       séparées par « | ». Elle correspond à tout ce qui  correspond  à  l’une
       des branches.

       Une branche est une(!) ou plusieurs pices concaténées. Elle correspond
       à ce qui correspond à la première pièce, suivi de ce qui  correspond  à
       la seconde, et ainsi de suite.

       Une pièce est un atome suivi éventuellement d’un unique(!) « * », «+ »,
       « ? », ou d’un encadrement. Un atome suivi de « * »  correspond  à  une
       séquence de 0 ou plusieurs correspondances pour l’atome. Un atome suivi
       d’un « + » correspond à une séquence de 1 ou plusieurs  correspondances
       pour  l’atome.  Un  atome suivi d’un « ? » correspond à une séquence de
       zéro ou une correspondance pour l’atome.

       Un encadrement est un « { » suivi d’un entier décimal non-signé, suivis
       éventuellement d’une virgule, suivis éventuellement d’un entier décimal
       non-signé, toujours suivis d’un « } ». Les entiers doivent être entre 0
       et  RE_DUP_MAX (255(!)) compris, et s’il y en a deux, le second ne doit
       pas être plus petit que le premier. Un  atome  suivi  d’un  encadrement
       contenant  un entier i et pas de virgule correspond à une séquence de i
       correspondances  pour  l’atome  exactement.   Un   atome   suivi   d’un
       encadrement  contenant  un  entier  i  et  une virgule correspond à une
       séquence d’au moins i correspondances pour l’atome. Un atome suivi d’un
       encadrement  contenant deux entiers i et j correspond à une séquence de
       i à j (compris) correspondances pour l’atome.

       Un atome est une expression rationnelle encadrée  par  des  parenthèses
       (correspondant  à  ce  qui  correspond  à l’expression rationnelle), un
       ensemble vide « () » (correspond à une chaîne nulle)(!), une expression
       entre  crochets  (voir  plus  bas),  un  point  « . »  (correspondant à
       n’importe quel caractère), un accent « ^ » (correspondant à une  chaîne
       vide  en début de ligne), « $ » (correspondant à une chaîne vide en fin
       de  ligne),  un  «\ »  suivi  d’un  des   caractères   « ^.[$()|*+?{\ »
       (correspondant    au    caractère   littéral   -   sans   signification
       particulière), un « \ » suivi  de  n’importe  quel  autre  caractère(!)
       (correspondant  au  caractère  pris  sous  forme littérale, comme si le
       « \ » était absent(!)),  ou  un  caractère  simple  sans  signification
       particulière   (correspondant  à  ce  caractère/  Un  «{ »  suivi  d’un
       caractère autre qu’un chiffre est considéré sous  sa  forme  littérale,
       pas un encadrement (!). Il est illégal de terminer une ER avec un « \ »
       seul.

       Une expression entre crochets est une liste de caractères encadrés  par
       «[] ».  Elle  correspond  normalement  à n’importe quel caractère de la
       liste. Si la liste débute par « ^ », elle correspond à  n’importe  quel
       caractère  sauf  ceux  de la liste. Si deux caractères de la liste sont
       séparés par un « - », ils représentent tout lintervalle de  caractères
       entre-eux   (compris).   Par  exemple  « [0-9] »  en  ASCII  représente
       n’importe quel chiffre décimal. Il est illégal(!)  d’utiliser  la  même
       limite   dans   deux  intervalles,  comme  « a-c-e ».  Les  intervalles
       dépendent beaucoup de l’ordre de  classement  des  caractères,  et  les
       programmes portables doivent éviter de les utiliser.

       Pour  insérer  un  « ] »  littéral  dans la liste, il faut le mettre en
       première position (ou après un éventuel « ^ »). Pour inclure  un  « - »
       littéral,  il  faut  le  placer  en  première, dernière position, ou en
       seconde borne d’un intervalle. Pour utiliser un  -  en  première  borne
       d’intervalle,  encadrez-le  entre  « [. »  et  « .] » pour en faire une
       fusion (plus bas). À  l’exception  de  ces  éléments,  et  de  quelques
       combinaisons  avec  des  crochets  (voir  plus  bas),  tous  les autres
       caractères spéciaux, y compris le « \ », perdent  leurs  significations
       spéciales dans une expression entre crochets.

       Dans  une  expression  entre crochet, une fusion (un seul caractère, ou
       une séquence de caractères qui se comporte comme un seul, ou un nom  de
       fusion)  entre « [. » et « .] » correspond à la séquence des caractères
       de la fusion. Une séquence est un élément unique de l’expression  entre
       crochets.  Ainsi,  un  expression  entre  crochets contenant une fusion
       multi-caractères peut correspondre à plus d’un caractère. Par  exemple,
       si  la  séquence  inclut  la  fusion  « ch », alors l’ER « [[.ch.]]*c »
       correspond aux cinq premiers caractères de « chchcc ».

       Dans une expression entre crochets, une séquence encadrée par « [= » et
       « =] »  est  une  classe d’équivalence, correspondant à la séquence des
       caractères de tous les  éléments  équivalents  à  celui-ci,  y  compris
       lui-même.   (S’il   n’y   a   pas  d’autres  éléments  équivalents,  le
       fonctionnement est  le  même  que  si  l’encadrement  était  « [. »  et
       « .] »).  Par exemple, si o et ^ sont membres d’une classe équivalence,
       alors «[[=o=]] », « [[=o^=]] », et « [oo^] »  sont  tous  synonymes.  Une
       classe d’équivalence ne doit(!) pas être une borne d’intervalle.

       Dans  une  expression  entre crochet, le nom d’une classe de caractres
       encadré par « [: »  et  « :] »  correspond  à  la  liste  de  tous  les
       caractères de la classe. Les noms des classes standards sont :

              alnum       digit       punct
              alpha       graph       space
              blank       lower       upper
              cntrl       print       xdigit

       Cela  correspond aux classes des caractères définis pour wctype(3). Une
       localisation peut en fournir d’autres. Une classe de caractères ne doit
       pas être utilisée comme borne d’intervalle.

       Dans  le cas où une ER peut correspondre à plusieurs sous-chaînes d’une
       chaîne donnée, elle correspond à celle qui commence le plus tôt dans la
       chaîne.  Si l’ER peut correspondre à plusieurs sous-chaînes débutant au
       même  point,  elle  correspond  à  la  plus  longue  sous-chaîne.   Les
       sous-expressions  correspondent  aussi  à  la  plus  longue sous-chaîne
       possible, à condition que  la  correspondance  complète  soit  la  plus
       longue  possible,  les  sous-expressions débutant le plus tôt dans l’ER
       ayant  priorité  sur  celles  débutant  plus  loin.   Notez   que   les
       sous-expressions   de   haut-niveau   ont   donc   priorité   sur   les
       sous-expressions de bas-niveau les composant.

       La longueur des correspondances  est  mesurée  en  caractères,  pas  en
       éléments  fusionnés. Une chaîne vide est considérée comme plus longueur
       qu’aucune correspondance.  Par  exemple  « bb* »  correspond  au  trois
       caractères   du  milieu  de  « abbbc »,  « (wee|week)(knights|nights) »
       correspond aux dix caractères de « weeknights », quand  « (.*).* »  est
       mis   en   correspondance   avec   « abc »,  la  sous-expression  entre
       parenthèses correspond aux trois caractères, et si « (a*)* » est mis en
       correspondance avec « bc » l’ER entière et la sous-ER entre parenthèses
       correspondent toutes deux avec une chaîne nulle.

       Si une correspondance sans distinction de casse  est  demandée,  toutes
       les   différences  entre  majuscules  et  minuscules  disparaissent  de
       l’alphabet. Un symbole alphabétique apparaissant hors d’une  expression
       entre  crochets  est  remplacé  par  une  expression contenant les deux
       casses (par exemple « x » devient « [xX] »).  Lorsqu’il  apparaît  dans
       une  expression  entre  crochets,  tous  ses  équivalents  sont ajoutés
       (« [x] » devient «[xX] » et « [^x] » devient « [^xX] »).

       Aucune limite particulière n’est imposée sur la longueur est ER(!). Les
       programmes  destinés  à  être  portables devrait limiter leurs ER à 256
       octets, car  une  implémentation  compatible  POSIX  peut  refuser  les
       expressions plus longues.

       Les   expressions   rationnelles  obsolètes  (basiques)  diffèrent  sur
       plusieurs points. « | », « + », et « ? » sont  des  caractères  normaux
       sans  équivalents. Les délimiteurs d’encadrements sont « \{ » et « \}»,
       car « { » et « { » sont des caractères ordinaires. Les parenthèses pour
       les sous-expressions sont « \( » et « \) », car « ( » et « ) » sont des
       caractères ordinaires. « ^ » est un caractère ordinaire sauf  au  début
       d’une  ER ou au(!) début d’une sous-expression entre parenthèses, « $ »
       est un caractère ordinaire sauf à la fin d’une ER ou à(!) la fin  d’une
       sous-expressions entre parenthèses, et « * » est un caractère ordinaire
       s’il apparaît au début d’une ER ou au début d’une sous-expression entre
       parenthèses (après un éventuel « ^ »).

       Enfin,  il  existe un nouveau type d’atome, la rfrence arrire : « \»
       suivi d’un chiffre décimal non-nul n correspond à la même  séquence  de
       caractères   que   ceux   mis   en   correspondance   avec   la  n-ième
       sous-expression   entre   parenthèses.   (les   sous-expressions   sont
       numérotées  par leurs parenthèses ouvrantes, de gauche à droite), ainsi
       « \([bc]\)\1 » correspond à « bb » ou « cc » mais pas à « bc ».

BOGUES

       Avoir deux sortes d’ER est un calvaire.

       La norme POSIX.2 actuelle dit que « ) » est un caractère  ordinaire  en
       l’absence   de   la   « ( »  correspondante.  C’est  dû  à  une  erreur
       d’interprétation et changera probablement. Évitez d’en tenir compte.

       Les références arrières sont  un  vrai  calvaire,  et  posent  de  gros
       problèmes  d’efficacité pour l’implémentation. Elles sont de plus assez
       mal définies (est-ce que « a\(\(b\)*\2\)*d » correspond à  « abbbd »?).
       Évitez-les.

       Les  spécifications POSIX.2 sur les correspondances sans distinction de
       casse sont assez  vagues.  La  description  donnée  plus  haut  est  le
       consensus actuel parmi les implémenteurs.

AUTEUR

       Cette page a été prise dans le paquet regex de Henry Spencer.

VOIR AUSSI

       grep(1), regex(3)

       POSIX.2, section 2.8 (Regular Expression Notation).

COLOPHON

       Cette  page  fait  partie  de  la  publication 3.23 du projet man-pages
       Linux. Une description du projet et des instructions pour signaler  des
       anomalies       peuvent       être       trouvées      à      l’adresse
       http://www.kernel.org/doc/man-pages/.

TRADUCTION

       Cette page de manuel a été traduite  et  mise  à  jour  par  Christophe
       Blaess  <http://www.blaess.fr/christophe/> entre 1996 et 2003, puis par
       Alain Portal <aportal AT univ-montp2 DOT fr> jusqu’en 2006, et  mise  à
       disposition sur http://manpagesfr.free.fr/.

       Les mises à jour et corrections de la version présente dans Debian sont
       directement gérées par Julien Cristau <jcristau@debian.org> et l’équipe
       francophone de traduction de Debian.

       Veuillez   signaler   toute   erreur   de   traduction  en  écrivant  à
       <debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
       paquet manpages-fr.

       Vous  pouvez  toujours avoir accès à la version anglaise de ce document
       en utilisant la commande « man -L C <section> <page_de_man> ».

                                12 janvier 2009