Provided by: manpages-fr_4.17.0-2_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 « basiques » pour
       POSIX.2) (N.d.T. : le terme « officiel » pour la traduction de « regular expression »  est
       « expression    rationnelle »    et    c'est    celui    employé   ici,   mais   consultez
       https://fr.wikipedia.org/wiki/Expression_régulières). Les ER obsolètes existent surtout  à
       titre  de  compatibilité  avec  d'anciens  programmes et  elles  seront abordées à 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  zéro  ou  plusieurs
       correspondances pour l'atome. Un atome suivi d'un « + » correspond à une séquence d’une 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é, suivi éventuellement
       d'une virgule, suivie éventuellement d'un autre 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  ER  encadrée par des parenthèses (correspondant à ce qui correspond à
       l’ER), un ensemble vide « () » (correspondant à la chaîne vide)(!), 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 à ce caractère considéré comme un caractère ordinaire), 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, non pas comme le  début  d’un  encadrement(!).  Il  est
       illégal de terminer une ER avec un « \ ».

       Une  expression  entre  crochets  est  une  liste  de caractères encadrés par « [] ». Elle
       correspond normalement à n'importe quel caractère de la liste (mais voir ci-après). Si  la
       liste  débute  par « ^ », elle correspond à n'importe quel caractère sauf ceux de la liste
       (mais voir ci-après). 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 ou
       en dernière position, ou comme seconde borne d'un intervalle. Pour utiliser un « - » comme
       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
       pour  l’un  ou  l’autre) entre « [. » et « .] » correspond à la séquence des caractères de
       cet élément de classement. Une séquence est un seul  élément  de  la  liste  d'expressions
       entre  crochets.  Une  expression  entre  crochets  contenant  un  élément  de  classement
       multicaractère peut donc 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 ».

       Within a bracket expression,  a  collating  element  enclosed  in  "[="  and  "=]"  is  an
       equivalence  class,  standing  for  the  sequences of characters of all collating elements
       equivalent to that one, including itself. (If there  are  no  other  equivalent  collating
       elements,  the  treatment  is  as  if  the  enclosing  delimiters were "[." and ".]".) For
       example, if o and ô are the members of an equivalence class,  then  "[[=o=]]",  "[[=ô=]]",
       and "[oô]" are all synonymous. An equivalence class may not(!) be an endpoint of a range.

       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

       Ces  classes  correspondent  aux  classes  de  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, avec
       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  la  chaîne
       vide.

       Si une correspondance sans distinction de casse est demandée, toutes les différences entre
       capitales et  minuscules  disparaissent  de  l'alphabet.  Quand  un  symbole  alphabétique
       existant  dans  les  deux  casses  apparait  hors  d'une expression entre crochets, il 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  des  ER(!).  Les  programmes
       destinés  à être portables devraient limiter leurs ER à 256 octets, car une implémentation
       peut refuser les expressions plus longues pour demeurer compatible avec POSIX.

       Les expressions rationnelles obsolètes  (« basiques »)  diffèrent  sur  plusieurs  points.
       « | »,  « + »  et  « ? » sont des caractères normaux et n’ont pas d’équivalents pour leurs
       fonctionnalités. Les délimiteurs d'encadrement sont « \{ » et « \} », car « { »  et  « } »
       sont  des  caractères ordinaires. Les parenthèses pour les sous-expressions sont « \( » et
       « \) », « ( » et « ) » étant  par  eux-mêmes  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-expression  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
       « ^ » au début).

       Enfin,  il existe un nouveau type d'atome, la référence arrière : « \ » suivi d'un chiffre
       décimal non nul n qui 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

       Utiliser deux sortes d'ER est une ineptie.

       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   cela   changera
       probablement. Évitez d'en tenir compte.

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

       Les spécifications de POSIX.2 sur les correspondances sans distinction de casse sont assez
       vagues. La définition « une casse implique toutes les casses » donnée  plus  haut  est  le
       consensus actuel parmi les implémentations comme étant la bonne interprétation.

AUTEUR

       Cette page est tirée du paquet regex de Henry Spencer.

VOIR AUSSI

       grep(1), regex(3)

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

TRADUCTION

       La  traduction  française  de  cette  page  de  manuel  a  été créée par Christophe Blaess
       <https://www.blaess.fr/christophe/>, Stéphan  Rafin  <stephan.rafin@laposte.net>,  Thierry
       Vignaud  <tvignaud@mandriva.com>,  François Micaux, Alain Portal <aportal@univ-montp2.fr>,
       Jean-Philippe   Guérard   <fevrier@tigreraye.org>,   Jean-Luc   Coulon   (f5ibh)    <jean-
       luc.coulon@wanadoo.fr>,    Julien    Cristau    <jcristau@debian.org>,    Thomas   Huriaux
       <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin
       Duneau  <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis
       Barbier  <barbier@debian.org>,  David  Prévot   <david@tilapin.org>,   Frédéric   Hantrais
       <fhantrais@gmail.com> et Jean-Paul Guillonneau <guillonneau.jeanpaul@free.fr>

       Cette  traduction  est  une  documentation libre ; veuillez vous reporter à la GNU General
       Public  License  version 3  ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩   concernant   les
       conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.

       Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un
       message à ⟨debian-l10n-french@lists.debian.org⟩.