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)