Provided by: manpages-fr_2.45.1-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  basiques  pour  POSIX.2).
        [NDT :  Le  terme  « officiel » pour la traduction de « Regular expres‐
        sion » 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 par‐
        lera à 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 correspon‐
        dances  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 « () » (correspond à 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 « ^.[$()|*+?{\ »  (corre‐
        spondant  au  caractère littéral - sans signification particulière), un
        « \ » suivi de n’importe quel autre caractère(!) (correspondant au car‐
        actè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  sec‐
        onde  borne  d’un  intervalle.  Pour  utiliser  un  - en première borne
        d’intervalle, encadrez-le entre « [. » et  « .] »  pour  en  faire  une
        fusion  (plus bas).  À l’exception de ces éléments, et de quelques com‐
        binaisons 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 crochet, une fusion (un  seul  caractère,  ou
        une  séquence de caractères qui se comporte comme un seul, ou un nom de
        fusion) entre « [. » et « .] » correspond à la séquence des  caractères
        de  la fusion. Une séquence est un élément unique de l’expression entre
        crochets. Ainsi, un expression  entre  crochets  contenant  une  fusion
        multi-caractères  peut correspondre à plus d’un caractère. Par exemple,
        si la séquence inclut la fusion « ch », alors l’ER « [[.ch.]]*c »  cor‐
        respond aux cinq premiers caractères de « chchcc ».
 
        Dans une expression entre crochets, une séquence encadrée par « [= » et
        « =] » est une classe d’équivalence, correspondant à  la  séquence  des
        caractères  de  tous  les  éléments  équivalents  à celui-ci, y compris
        lui-même.  (S’il n’y a pas d’autres éléments équivalents, le  fonction‐
        nement  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 crochet, le nom d’une  classe  de  caractères
        encadré  par  « [: »  et  « :] » correspond à la liste de tous les car‐
        actères de la classe.  Les noms des classes standards sont :
 
               alnum       digit       punct
               alpha       graph       space
               blank       lower       upper
               cntrl       print       xdigit
 
        Cela correspond aux classes des caractères définis 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  pos‐
        sible,  à  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 fusionnés. Une chaîne vide est considérée comme plus  longueur
        qu’aucune  correspondance. Par exemple « bb* » correspond au trois car‐
        actères du milieu de « abbbc »,  « (wee|week)(knights|nights) »  corre‐
        spond aux dix caractères de « weeknights », quand « (.*).* » est mis en
        correspondance avec « abc », la sous-expression entre parenthèses  cor‐
        respond 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  (basiques)   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 par‐
        enthè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  par‐
        enthè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  par‐
        enthèses  ouvrantes,  de  gauche à droite), ainsi « \([bc]\)\1 » corre‐
        spond à « bb » ou « cc » mais pas à « bc ».
        regex(3)
 
        POSIX.2, section 2.8 (Regular Expression Notation).
 

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 consen‐
        sus actuel parmi les implémenteurs.
 
        La syntaxe concernant les limites de mot est incroyablement laide.
 

AUTEUR

        Cette page provient du paquetage regex de Henry Spencer.
 

TRADUCTION

        Cette  page  de  manuel  a  été  traduite et mise à jour par Christophe
        Blaess <http://www.blaess.fr/christophe/> entre 1996 et 2003, puis  par
        Alain  Portal  <aportal AT univ-montp2 DOT fr> jusqu’en 2006, et mise à
        disposition sur http://manpagesfr.free.fr/.
 
        Les mises à jour et corrections de la version présente dans Debian sont
        directement gérées par Julien Cristau <jcristau@debian.org> et l’équipe
        francophone de traduction de Debian.
 
        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> ».
 
                                 7 février 1994                        REGEX(7)