Provided by:
manpages-fr_3.32d0.2p4-1_all 
NOM
regex - Expressions rationnelles POSIX.2
DESCRIPTION
Les expressions rationnelles (<< ER >>), definies par POSIX.2 existent
sous deux formes : les ER modernes (en gros celles de egrep ; que
POSIX.2 appelle expressions rationnelles << etendues >>), et les ER
obsoletes (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
reguliere >>, meme s'il s'agit d'un leger abus de langage). Les ER
obsoletes existent surtout a titre de compatibilite avec d'anciens
programmes ; on en parlera a la fin. POSIX.2 laisse de cote certains
aspects syntaxiques et semantiques des ER ; un signe << (!) >> indique
une interpretation qui peut ne pas etre totalement portable sur
d'autres implementations de POSIX.2.
Une ER (moderne) est une(!) ou plusieurs branches non-vides(!),
separees par << | >>. Elle correspond a tout ce qui correspond a l'une
des branches.
Une branche est une(!) ou plusieurs pi`eces concatenees. Elle correspond
a ce qui correspond a la premiere piece, suivi de ce qui correspond a
la seconde, et ainsi de suite.
Une piece est un atome suivi eventuellement d'un unique(!) << * >>,
<< + >>, << ? >>, ou d'un encadrement. Un atome suivi de << * >>
correspond a une sequence de 0 ou plusieurs correspondances pour
l'atome. Un atome suivi d'un << + >> correspond a une sequence de 1 ou
plusieurs correspondances pour l'atome. Un atome suivi d'un << ? >>
correspond a une sequence de zero ou une correspondance pour l'atome.
Un encadrement est un << { >> suivi d'un entier decimal non-signe,
suivis eventuellement d'une virgule, suivis eventuellement d'un entier
decimal non-signe, toujours suivis d'un << } >>. Les entiers doivent
etre entre 0 et RE_DUP_MAX (255(!)) compris, et s'il y en a deux, le
second ne doit pas etre plus petit que le premier. Un atome suivi d'un
encadrement contenant un entier i et pas de virgule correspond a une
sequence de i correspondances pour l'atome exactement. Un atome suivi
d'un encadrement contenant un entier i et une virgule correspond a une
sequence d'au moins i correspondances pour l'atome. Un atome suivi d'un
encadrement contenant deux entiers i et j correspond a une sequence de
i a j (compris) correspondances pour l'atome.
Un atome est une expression rationnelle encadree par des parentheses
(correspondant a ce qui correspond a l'expression rationnelle), un
ensemble vide << () >> (correspondant a une chaine nulle)(!), une
expression entre crochets (voir plus bas), un point << . >>
(correspondant a n'importe quel caractere), un accent << ^ >>
(correspondant a une chaine vide en debut de ligne), << $ >>
(correspondant a une chaine vide en fin de ligne), un << \ >> suivi
d'un des caracteres << ^.[$()|*+?{\ >> (correspondant au caractere
litteral - sans signification particuliere), un << \ >> suivi de
n'importe quel autre caractere(!) (correspondant au caractere pris sous
forme litterale, comme si le << \ >> etait absent(!)), ou un caractere
simple sans signification particuliere (correspondant a ce caractere).
Un << { >> suivi d'un caractere autre qu'un chiffre est considere sous
sa forme litterale, pas un encadrement(!). Il est illegal de terminer
une ER avec un << \ >> seul.
Une expression entre crochets est une liste de caracteres encadres par
<< [] >>. Elle correspond normalement a n'importe quel caractere de la
liste. Si la liste debute par << ^ >>, elle correspond a n'importe quel
caractere sauf ceux de la liste. Si deux caracteres de la liste sont
separes par un << - >>, ils representent tout l'intervalle de
caracteres entre eux (compris). Par exemple << [0-9] >> en ASCII
represente n'importe quel chiffre decimal. Il est illegal(!) d'utiliser
la meme limite dans deux intervalles, comme << a-c-e >>. Les
intervalles dependent beaucoup de l'ordre de classement des caracteres,
et les programmes portables doivent eviter de les utiliser.
Pour inserer un << ] >> litteral dans la liste, il faut le mettre en
premiere position (ou apres un eventuel << ^ >>). Pour inclure un
<< - >> litteral, il faut le placer en premiere, derniere position, ou
en seconde borne d'un intervalle. Pour utiliser un - en premiere borne
d'intervalle, encadrez-le entre << [. >> et << .] >> pour en faire un
element de classement (voir plus bas). A l'exception de ces elements,
et de quelques combinaisons avec des crochets (voir plus bas), tous les
autres caracteres speciaux, y compris le << \ >>, perdent leurs
significations speciales dans une expression entre crochets.
Dans une expression entre crochets, un element de classement (un seul
caractere, ou une sequence de caracteres qui se comporte comme un seul,
ou un nom de sequence de classement) entre << [. >> et << .] >>
correspond a la sequence des caracteres de cet element de classement.
Une sequence est un element unique de l'expression entre crochets.
Ainsi, une expression entre crochets contenant un element de classement
multicaracteres peut correspondre a plus d'un caractere. Par exemple,
si la sequence inclut un element de classement << ch >>, alors l'ER
<< [[.ch.]]*c >> correspond aux cinq premiers caracteres de
<< chchcc >>.
Dans une expression entre crochets, un element de classement encadre
par << [= >> et << =] >> est une classe d'equivalence, correspondant a
la sequence des caracteres de tous les elements de classement
equivalents a celui-ci, y compris lui-meme (s'il n'y a pas d'autres
elements equivalents, le fonctionnement est le meme que si
l'encadrement etait << [. >> et << .] >>). Par exemple, si o et ^ sont
membres d'une classe equivalence, alors << [[=o=]] >>, << [[=o^=]] >>,
et << [oo^] >> sont tous synonymes. Une classe d'equivalence ne doit(!)
pas etre une borne d'intervalle.
Dans une expression entre crochets, le nom d'une classe de caract`eres
encadre par << [: >> et << :] >> correspond a la liste de tous les
caracteres 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 caracteres definies pour wctype(3). Une
localisation peut en fournir d'autres. Une classe de caracteres ne doit
pas etre utilisee comme borne d'intervalle.
Dans le cas ou une ER peut correspondre a plusieurs sous-chaines d'une
chaine donnee, elle correspond a celle qui commence le plus tot dans la
chaine. Si l'ER peut correspondre a plusieurs sous-chaines debutant au
meme point, elle correspond a la plus longue sous-chaine. Les
sous-expressions correspondent aussi a la plus longue sous-chaine
possible, a condition que la correspondance complete soit la plus
longue possible, les sous-expressions debutant le plus tot dans l'ER
ayant priorite sur celles debutant plus loin. Notez que les
sous-expressions de haut niveau ont donc priorite sur les
sous-expressions de bas niveau les composant.
La longueur des correspondances est mesuree en caracteres, pas en
elements de classement. Une chaine vide est consideree comme plus
longue qu'aucune correspondance. Par exemple << bb* >> correspond aux
trois caracteres du milieu de << abbbc >>,
<< (wee|week)(knights|nights) >> correspond aux dix caracteres de
<< weeknights >>, quand << (.*).* >> est mis en correspondance avec
<< abc >>, la sous-expression entre parentheses correspond aux trois
caracteres, et si << (a*)* >> est mis en correspondance avec << bc >>
l'ER entiere et la sous-ER entre parentheses correspondent toutes deux
avec une chaine nulle.
Si une correspondance sans distinction de casse est demandee, toutes
les differences entre majuscules et minuscules disparaissent de
l'alphabet. Un symbole alphabetique apparaissant hors d'une expression
entre crochets est remplace par une expression contenant les deux
casses (par exemple << x >> devient << [xX] >>). Lorsqu'il apparait
dans une expression entre crochets, tous ses equivalents sont ajoutes
(<< [x] >> devient << [xX] >> et << [^x] >> devient << [^xX] >>).
Aucune limite particuliere n'est imposee sur la longueur est ER(!). Les
programmes destines a etre portables devrait limiter leurs ER a
256 octets, car une implementation compatible POSIX peut refuser les
expressions plus longues.
Les expressions rationnelles obsoletes (de base) different sur
plusieurs points. << | >>, << + >>, et << ? >> sont des caracteres
normaux sans equivalents. Les delimiteurs d'encadrements sont << \{ >>
et << \} >>, car << { >> et << { >> sont des caracteres ordinaires. Les
parentheses pour les sous-expressions sont << \( >> et << \) >>, car
<< ( >> et << ) >> sont des caracteres ordinaires. << ^ >> est un
caractere ordinaire sauf au debut d'une ER ou au(!) debut d'une
sous-expression entre parentheses, << $ >> est un caractere ordinaire
sauf a la fin d'une ER ou a(!) la fin d'une sous-expressions entre
parentheses, et << * >> est un caractere ordinaire s'il apparait au
debut d'une ER ou au debut d'une sous-expression entre parentheses
(apres un eventuel << ^ >>).
Enfin, il existe un nouveau type d'atome, la r'ef'erence arri`ere :
<< \ >> suivi d'un chiffre decimal non-nul n correspond a la meme
sequence de caracteres que ceux mis en correspondance avec la n-ieme
sous-expression entre parentheses (les sous-expressions sont numerotees
par leurs parentheses ouvrantes, de gauche a droite), ainsi
<< \([bc]\)\1 >> correspond a << bb >> ou << cc >> mais pas a << bc >>.
BOGUES
Avoir deux sortes d'ER est un calvaire.
La norme POSIX.2 actuelle dit que << ) >> est un caractere ordinaire en
l'absence de la << ( >> correspondante. C'est du a une erreur
d'interpretation et changera probablement. Evitez d'en tenir compte.
Les references arrieres sont un vrai calvaire, et posent de gros
problemes d'efficacite pour l'implementation. Elles sont de plus assez
mal definies (est-ce que << a\(\(b\)*\2\)*d >> correspond a
<< abbbd >> ?). Evitez-les.
Les specifications POSIX.2 sur les correspondances sans distinction de
casse sont assez vagues. La description donnee plus haut est le
consensus actuel parmi les implementeurs.
AUTEUR
Cette page a ete 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.32 du projet man-pages
Linux. Une description du projet et des instructions pour signaler des
anomalies peuvent etre trouvees a l'adresse
<URL:http://www.kernel.org/doc/man-pages/>.
TRADUCTION
Depuis 2010, cette traduction est maintenue a l'aide de l'outil po4a
<URL:http://po4a.alioth.debian.org/> par l'equipe de traduction
francophone au sein du projet perkamon
<URL:http://perkamon.alioth.debian.org/>.
Christophe Blaess <URL:http://www.blaess.fr/christophe/> (1996-2003),
Alain Portal <URL:http://manpagesfr.free.fr/> (2003-2006). Julien
Cristau et l'equipe francophone de traduction de Debian (2006-2009).
Veuillez signaler toute erreur de traduction en ecrivant a
<debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
paquet manpages-fr.
Vous pouvez toujours avoir acces a la version anglaise de ce document
en utilisant la commande << man -L C <section> <page_de_man> >>.
12 janvier 2009 REGEX(7)