Man page - re_format(7)

Packages contains this manual

Available languages:

en fr es it ro de

Manual

regex

NOM
DESCRIPTION
BOGUES
AUTEUR
VOIR AUSSI
TRADUCTION

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 :

Image grohtml-3849148-1.png

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 .