Provided by:
manpages-fr_2.45.1-1_all 
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)