Provided by: manpages-fr_3.32d0.2p4-1_all bug

NOM

       regex - Expressions rationnelles POSIX.2

DESCRIPTION

       Les  expressions rationnelles (<< ER >>), definies par POSIX.2 existent
       sous deux formes : les ER modernes  (en  gros  celles  de  egrep ;  que
       POSIX.2  appelle  expressions  rationnelles  << etendues >>), et les ER
       obsoletes (en gros celles de ed(1) ;  les  ER  de  base  pour  POSIX.2)
       (N.d.T. :  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
       reguliere >>, meme s'il s'agit d'un leger  abus  de  langage).  Les  ER
       obsoletes  existent  surtout  a  titre  de compatibilite avec d'anciens
       programmes ; on en parlera a la fin. POSIX.2 laisse  de  cote  certains
       aspects  syntaxiques et semantiques des ER ; un signe << (!) >> indique
       une interpretation  qui  peut  ne  pas  etre  totalement  portable  sur
       d'autres implementations de POSIX.2.

       Une  ER  (moderne)  est  une(!)  ou  plusieurs  branches  non-vides(!),
       separees par << | >>. Elle correspond a tout ce qui correspond a  l'une
       des branches.

       Une branche est une(!) ou plusieurs pi`eces concatenees. Elle correspond
       a ce qui correspond a la premiere piece, suivi de ce qui  correspond  a
       la seconde, et ainsi de suite.

       Une  piece  est  un  atome suivi eventuellement d'un unique(!) << * >>,
       << + >>, << ? >>, ou  d'un  encadrement.  Un  atome  suivi  de  << * >>
       correspond  a  une  sequence  de  0  ou  plusieurs correspondances pour
       l'atome. Un atome suivi d'un << + >> correspond a une sequence de 1  ou
       plusieurs  correspondances  pour  l'atome.  Un atome suivi d'un << ? >>
       correspond a une sequence de zero ou une correspondance pour l'atome.

       Un encadrement est un << { >>  suivi  d'un  entier  decimal  non-signe,
       suivis  eventuellement d'une virgule, suivis eventuellement d'un entier
       decimal non-signe, toujours suivis d'un << } >>.  Les  entiers  doivent
       etre  entre  0  et RE_DUP_MAX (255(!)) compris, et s'il y en a deux, le
       second ne doit pas etre plus petit que le premier. Un atome suivi  d'un
       encadrement  contenant  un  entier i et pas de virgule correspond a une
       sequence de i correspondances pour l'atome exactement. Un  atome  suivi
       d'un  encadrement contenant un entier i et une virgule correspond a une
       sequence d'au moins i correspondances pour l'atome. Un atome suivi d'un
       encadrement  contenant deux entiers i et j correspond a une sequence de
       i a j (compris) correspondances pour l'atome.

       Un atome est une expression rationnelle encadree  par  des  parentheses
       (correspondant  a  ce  qui  correspond  a l'expression rationnelle), un
       ensemble vide << () >>  (correspondant  a  une  chaine  nulle)(!),  une
       expression   entre   crochets   (voir   plus  bas),  un  point  << . >>
       (correspondant  a  n'importe  quel  caractere),   un   accent   << ^ >>
       (correspondant   a   une  chaine  vide  en  debut  de  ligne),  << $ >>
       (correspondant a une chaine vide en fin de  ligne),  un  << \ >>  suivi
       d'un  des  caracteres  << ^.[$()|*+?{\ >>  (correspondant  au caractere
       litteral -  sans  signification  particuliere),  un  << \ >>  suivi  de
       n'importe quel autre caractere(!) (correspondant au caractere pris sous
       forme litterale, comme si le << \ >> etait absent(!)), ou un  caractere
       simple  sans signification particuliere (correspondant a ce caractere).
       Un << { >> suivi d'un caractere autre qu'un chiffre est considere  sous
       sa  forme  litterale, pas un encadrement(!). Il est illegal de terminer
       une ER avec un << \ >> seul.

       Une expression entre crochets est une liste de caracteres encadres  par
       << [] >>.  Elle correspond normalement a n'importe quel caractere de la
       liste. Si la liste debute par << ^ >>, elle correspond a n'importe quel
       caractere  sauf  ceux  de la liste. Si deux caracteres de la liste sont
       separes  par  un  << - >>,  ils  representent  tout   l'intervalle   de
       caracteres  entre  eux  (compris).  Par  exemple  << [0-9] >>  en ASCII
       represente n'importe quel chiffre decimal. Il est illegal(!) d'utiliser
       la   meme   limite   dans  deux  intervalles,  comme  << a-c-e >>.  Les
       intervalles dependent beaucoup de l'ordre de classement des caracteres,
       et les programmes portables doivent eviter de les utiliser.

       Pour  inserer  un  << ] >> litteral dans la liste, il faut le mettre en
       premiere position (ou apres  un  eventuel  << ^ >>).  Pour  inclure  un
       << - >>  litteral, il faut le placer en premiere, derniere position, ou
       en seconde borne d'un intervalle. Pour utiliser un - en premiere  borne
       d'intervalle,  encadrez-le  entre << [. >> et << .] >> pour en faire un
       element de classement (voir plus bas). A l'exception de  ces  elements,
       et de quelques combinaisons avec des crochets (voir plus bas), tous les
       autres  caracteres  speciaux,  y  compris  le  << \ >>,  perdent  leurs
       significations speciales dans une expression entre crochets.

       Dans  une  expression entre crochets, un element de classement (un seul
       caractere, ou une sequence de caracteres qui se comporte comme un seul,
       ou  un  nom  de  sequence  de  classement)  entre  << [. >> et << .] >>
       correspond a la sequence des caracteres de cet element  de  classement.
       Une  sequence  est  un  element  unique de l'expression entre crochets.
       Ainsi, une expression entre crochets contenant un element de classement
       multicaracteres  peut  correspondre a plus d'un caractere. Par exemple,
       si la sequence inclut un element de  classement  << ch >>,  alors  l'ER
       << [[.ch.]]*c >>   correspond   aux   cinq   premiers   caracteres   de
       << chchcc >>.

       Dans une expression entre crochets, un element  de  classement  encadre
       par  << [= >> et << =] >> est une classe d'equivalence, correspondant a
       la  sequence  des  caracteres  de  tous  les  elements  de   classement
       equivalents  a  celui-ci,  y  compris lui-meme (s'il n'y a pas d'autres
       elements  equivalents,  le  fonctionnement   est   le   meme   que   si
       l'encadrement  etait << [. >> et << .] >>). Par exemple, si o et ^ sont
       membres d'une classe equivalence, alors  << [[=o=]] >>,  << [[=o^=]] >>,
       et  << [oo^] >> sont tous synonymes. Une classe d'equivalence ne doit(!)
       pas etre une borne d'intervalle.

       Dans une expression entre crochets, le nom d'une classe  de  caract`eres
       encadre  par  << [: >>  et  << :] >>  correspond a la liste de tous les
       caracteres de la classe. Les noms des classes standard sont :

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

       Cela correspond aux classes des caracteres definies pour wctype(3). Une
       localisation peut en fournir d'autres. Une classe de caracteres ne doit
       pas etre utilisee comme borne d'intervalle.

       Dans le cas ou une ER peut correspondre a plusieurs sous-chaines  d'une
       chaine donnee, elle correspond a celle qui commence le plus tot dans la
       chaine. Si l'ER peut correspondre a plusieurs sous-chaines debutant  au
       meme   point,  elle  correspond  a  la  plus  longue  sous-chaine.  Les
       sous-expressions correspondent  aussi  a  la  plus  longue  sous-chaine
       possible,  a  condition  que  la  correspondance  complete soit la plus
       longue possible, les sous-expressions debutant le plus  tot  dans  l'ER
       ayant   priorite   sur   celles  debutant  plus  loin.  Notez  que  les
       sous-expressions  de  haut   niveau   ont   donc   priorite   sur   les
       sous-expressions de bas niveau les composant.

       La  longueur  des  correspondances  est  mesuree  en caracteres, pas en
       elements de classement. Une  chaine  vide  est  consideree  comme  plus
       longue  qu'aucune  correspondance. Par exemple << bb* >> correspond aux
       trois      caracteres       du       milieu       de       << abbbc >>,
       << (wee|week)(knights|nights) >>   correspond  aux  dix  caracteres  de
       << weeknights >>, quand << (.*).* >> est  mis  en  correspondance  avec
       << abc >>,  la  sous-expression  entre parentheses correspond aux trois
       caracteres, et si << (a*)* >> est mis en correspondance  avec  << bc >>
       l'ER  entiere et la sous-ER entre parentheses correspondent toutes deux
       avec une chaine nulle.

       Si une correspondance sans distinction de casse  est  demandee,  toutes
       les   differences  entre  majuscules  et  minuscules  disparaissent  de
       l'alphabet. Un symbole alphabetique apparaissant hors d'une  expression
       entre  crochets  est  remplace  par  une  expression contenant les deux
       casses (par exemple << x >>  devient  << [xX] >>).  Lorsqu'il  apparait
       dans  une  expression entre crochets, tous ses equivalents sont ajoutes
       (<< [x] >> devient << [xX] >> et << [^x] >> devient << [^xX] >>).

       Aucune limite particuliere n'est imposee sur la longueur est ER(!). Les
       programmes  destines  a  etre  portables  devrait  limiter  leurs  ER a
       256 octets, car une implementation compatible POSIX  peut  refuser  les
       expressions plus longues.

       Les   expressions   rationnelles  obsoletes  (de  base)  different  sur
       plusieurs points. << | >>, << + >>,  et  << ? >>  sont  des  caracteres
       normaux  sans equivalents. Les delimiteurs d'encadrements sont << \{ >>
       et << \} >>, car << { >> et << { >> sont des caracteres ordinaires. Les
       parentheses  pour  les  sous-expressions sont << \( >> et << \) >>, car
       << ( >> et << ) >> sont  des  caracteres  ordinaires.  << ^ >>  est  un
       caractere  ordinaire  sauf  au  debut  d'une  ER  ou  au(!) debut d'une
       sous-expression entre parentheses, << $ >> est un  caractere  ordinaire
       sauf  a  la  fin  d'une  ER ou a(!) la fin d'une sous-expressions entre
       parentheses, et << * >> est un caractere  ordinaire  s'il  apparait  au
       debut  d'une  ER  ou  au  debut d'une sous-expression entre parentheses
       (apres un eventuel << ^ >>).

       Enfin, il existe  un  nouveau  type  d'atome,  la  r'ef'erence  arri`ere :
       << \ >>  suivi  d'un  chiffre  decimal  non-nul  n correspond a la meme
       sequence de caracteres que ceux mis en correspondance  avec  la  n-ieme
       sous-expression entre parentheses (les sous-expressions sont numerotees
       par  leurs  parentheses  ouvrantes,  de   gauche   a   droite),   ainsi
       << \([bc]\)\1 >> correspond a << bb >> ou << cc >> mais pas a << bc >>.

BOGUES

       Avoir deux sortes d'ER est un calvaire.

       La norme POSIX.2 actuelle dit que << ) >> est un caractere ordinaire en
       l'absence  de  la  << ( >>  correspondante.  C'est  du  a  une   erreur
       d'interpretation et changera probablement. Evitez d'en tenir compte.

       Les  references  arrieres  sont  un  vrai  calvaire,  et posent de gros
       problemes d'efficacite pour l'implementation. Elles sont de plus  assez
       mal   definies   (est-ce   que   << a\(\(b\)*\2\)*d >>   correspond   a
       << abbbd >> ?). Evitez-les.

       Les specifications POSIX.2 sur les correspondances sans distinction  de
       casse  sont  assez  vagues.  La  description  donnee  plus  haut est le
       consensus actuel parmi les implementeurs.

AUTEUR

       Cette page a ete 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.32  du  projet  man-pages
       Linux.  Une description du projet et des instructions pour signaler des
       anomalies      peuvent      etre       trouvees       a       l'adresse
       <URL:http://www.kernel.org/doc/man-pages/>.

TRADUCTION

       Depuis  2010,  cette  traduction est maintenue a l'aide de l'outil po4a
       <URL:http://po4a.alioth.debian.org/>   par   l'equipe   de   traduction
       francophone        au        sein        du       projet       perkamon
       <URL:http://perkamon.alioth.debian.org/>.

       Christophe Blaess  <URL:http://www.blaess.fr/christophe/>  (1996-2003),
       Alain   Portal  <URL:http://manpagesfr.free.fr/>  (2003-2006).   Julien
       Cristau et l'equipe francophone de traduction de Debian (2006-2009).

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

       Vous pouvez toujours avoir acces a la version anglaise de  ce  document
       en utilisant la commande << man -L C <section> <page_de_man> >>.

                                12 janvier 2009                       REGEX(7)