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

NOM

       regex - Expressions rationnelles POSIX.2

DESCRIPTION

       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  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
       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  « () »  (correspondant  à  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 l'intervalle 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 un
       élément de classement (voir 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 crochets, un élément de classement (un seul
       caractère, ou une séquence de caractères qui se comporte comme un seul,
       ou  un nom de séquence de classement) entre « [. » et « .] » correspond
       à la séquence des caractères de cet élément de classement. Une séquence
       est  un  élément  unique  de  l'expression  entre  crochets. Ainsi, une
       expression  entre  crochets  contenant   un   élément   de   classement
       multicaractères  peut  correspondre à plus d'un caractère. Par exemple,
       si la séquence inclut un  élément  de  classement  « ch »,  alors  l'ER
       « [[.ch.]]*c » correspond aux cinq premiers caractères de « chchcc ».

       Dans  une  expression  entre crochets, un élément de classement encadré
       par « [= » et « =] » est une classe d'équivalence, correspondant  à  la
       séquence  des caractères de tous les éléments de classement é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 crochets, 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 standard sont :

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

       Cela correspond aux classes des caractères définies 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  de  classement.  Une  chaîne  vide  est considérée comme plus
       longue qu'aucune correspondance. Par  exemple  « bb* »  correspond  aux
       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  (de  base)  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.32 du projet man-pages
       Linux. Une description du projet et des instructions pour signaler  des
       anomalies       peuvent       être       trouvées      à      l'adresse
       <URL:http://www.kernel.org/doc/man-pages/>.

TRADUCTION

       Depuis 2010, cette traduction est maintenue à l'aide  de  l'outil  po4a
       <URL:http://po4a.alioth.debian.org/>   par   l'équipe   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'équipe francophone de traduction de Debian (2006-2009).

       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                       REGEX(7)