Provided by: manpages-fr_4.26.0-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(1) 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
       et non pas comme le début d’un encadrement(!). Il est interdit 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 ».

       Dans  une expression entre crochets, un élément de classement encadré par « [= » et « =] » est une classe
       d'équivalence, correspondant aux séquences de 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=]] », « [[=ô=]] », et « [oô] » 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

       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 « [rs]([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 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.

Pages du manuel de Linux 6.9.1                    15 juin 2024                                          regex(7)