Provided by: manpages-fr_3.65d1p1-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  pièces  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 caractères 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 référence arrière : « \ » 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.65 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

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

       Christophe    Blaess    <http://www.blaess.fr/christophe/>   (1996-2003),   Alain   Portal
       <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)