projman/hlp/fr/tcl/re_syntax.htm

400 lines
35 KiB
HTML
Raw Normal View History

2015-10-19 13:27:31 +03:00
<HTML><HEAD>
<BASEFONT FACE="Times New Roman" SIZE="2" COLOR="#000000">
</HEAD>
<BODY>
<div><H3><b>re_syntax&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Commandes Internes Tcl</b></H3></div>
<HR ALIGN="center">
<div><b>NOM</b></div>
<div ALIGN="LEFT" style="margin-left: 51px;">re_syntax <20> Syntaxe des expressions rationelles Tcl
</div><br>
<div><b>DESCRIPTION</b></div><br>
<div ALIGN="LEFT" style="margin-left: 51px;">Une <i>regular expression</i> (expression rationelle) d<>crit des cha<68>nes de caract<63>res. C'est un mod<6F>le qui correspond <20> certaines cha<68>nes et ne correspond pas <20> d'autres
</div><br>
<div><b>DIFFERENTES SORTES DE REs</b></div><br>
<div ALIGN="LEFT" style="margin-left: 51px;">Les expressions rationelles (&quot;RE&quot;s), comme d<>fini par POSIX, existent de deux sortes: <i><EFBFBD>tendue</i> REs (&quot;EREs&quot;) et <i>basiques</i> REs (&quot;BREs&quot;). Les EREs sont celles du <i>egrep</i> traditionel, alors que BREs sont celles du <i>ed</i> traditionel. Cette impl<70>mentation ajoute une troisi<73>me sorte, <i>advanced</i> REs (&quot;AREs&quot;), EREs avec quelques extensions significatives. </div>
<div ALIGN="LEFT" style="margin-left: 51px;">Cette page de manueluel d<>crit d'abord les AREs. Les BREs existent principalement pour compatibilit<69> ascendante avec quelques anciens programmes; elles seront vues <20> la fin. Les EREs POSIX sont presque un sous ensemble exact des AREs. Les fonctionnalit<69>s des AREs qui ne sont pas pr<70>sentes dans les EREs seront indiqu<71>es <br>
</div><br>
<div><b>SYNTAXE DES EXPRESSIONS RATIONELLES </b></div><br>
<div ALIGN="LEFT" style="margin-left: 51px;">Les expressions Tcl rationelles sont impl<70>ment<6E>es en utilisant le package <20>crit par Henry Spencer, bas<61> sur les spec 1003.2 et quelques unes (pas toutes) des extensions Perl5 (thanks, Henry!) la plus grande partie de la description des expressions rationelles ci-dessous est copi<70>e texto de sa page de manuel. </div>
<div ALIGN="LEFT" style="margin-left: 51px;">Une ARE est compos<6F>e d'une ou plusieurs <i>branches</i>, s<>par<61>es par `<b>|</b>', <20>gales <20> tout ce qui correspond <20> quelconque des <i>branches</i>. </div>
<div ALIGN="LEFT" style="margin-left: 51px;">Une <i>branche</i> est z<>ro ou plusieurs <i>contraintes</i> ou <i>atomes quantifi<66></i>, concat<61>n<EFBFBD>s. C'est une correspondance au premier, suivi par une correspondance au second, etc; une <i>branche </i>vide correspond <20> la cha<68>ne vide. </div>
<div ALIGN="LEFT" style="margin-left: 51px;">Un <i>atome quantifi<66></i> est un <i>atome</i> eventuellement suivi d'un <i>quantificateur</i>. Sans <i>quantificateur</i>, c'est une correspondance <20> <i>l'atome</i>. Les <i>quantificateurs</i>, et leur <i>atome</i> correspondant, sont: </div>
<div ALIGN="LEFT" style="margin-left: 120px;">
<DL>
<DT><b>*</b></DT><DD>une s<>quence de 0 ou plus correspondances <20> <i>l'atome</i>
</DD>
<DT><br><b>+</b>
</DT><DD>une s<>quence de 1 ou plus correspondances <20> <i>l'atome</i>
</DD>
<DT><br><b>?</b>
</DT><DD>une s<>quence de 0 ou 1 correspondance <20> <i>l'atome</i>
</DD>
<DT><br><b>&#123;</b><i>m</i><b>}</b>
</DT><DD>une s<>quence de exactement <i>m</i> correspondances <20> <i>l'atome</i>
</DD>
<DT><br><b>&#123;</b><i>m</i><b>,}</b>
</DT><DD>une s<>quence de <i>m</i> ou plus correspondances <20> <i>l'atome</i>
</DD>
<DT><br><b>&#123;</b><i>m</i><b>,</b><i>n</i><b>}</b>
</DT><DD>une s<>quence de <i>m</i> <20> <i>n</i> (incluses) correspondances <20> <i>l'atome</i>; <i>m</i> inf<6E>rieur <20> <i>n</i>
</DD>
<DT><br><b>*?&nbsp; +?&nbsp; ??&nbsp; &#123;</b><i>m</i><b>}?&nbsp; &#123;</b><i>m</i><b>,}?&nbsp; &#123;</b><i>m</i><b>,</b><i>n</i><b>}?</b>
</DT><DD><i>quantificateurs non-greedy</i>, qui correspondent au m<>me possibilit<69>s, mais se ref<65>rent au plus petit nombre plut<75>t qu'au plus grand nombre de correspondances (voir CORRESPONDANCES)
</DD>
</DL>
</div>
<div ALIGN="LEFT" style="margin-left: 51px;">Les formes utilisant <b>&#123;</b> et <b>}</b> sont appel<65>es <i>limites</i>. Les nombres <i>m</i> et <i>n</i> sont des entiers d<>cimaux non sign<67>s avec des valeurs autoris<69>es de 0 <20> 255 inclus. </div>
<div ALIGN="LEFT" style="margin-left: 51px;">Un <i>atome</i> est l'un de: </div>
<div ALIGN="LEFT" style="margin-left: 120px;">
<DL>
<DT><b>(</b><i>re</i><b>)</b></DT><DD>(o<> <i>re</i> est toute expression rationelle) correspond une correspondance <20> <i>re</i>, avec la correspondance marqu<71>e pour rapport
</DD>
<DT><br><b>(?:</b><i>re</i><b>)</b>
</DT><DD>comme pr<70>cedent, mais sans reporting (une &quot;non-capturing&quot; ensemble de parenth<74>ses)
</DD>
<DT><br><b>()</b>
</DT><DD>correspond <20> une cha<68>ne vide, marqu<71>e pour rapport.
</DD>
<DT><br><b>(?:)</b>
</DT><DD>correspond <20> une cha<68>ne vide, sans rapport
</DD>
<DT><br><b>&#91;</b><i>chars</i><b>]</b>
</DT><DD>une <i>bracket expression</i>, correspondante <20> un quelconque <i>chars</i> (voir BRACKET EXPRESSIONS pour plus de d<>tail)
</DD>
<DT><br><b>.</b>
</DT><DD>correspond <20> un seul caract<63>re quelconque
</DD>
<DT><br><b>&#92;</b><i>k</i>
</DT><DD>(o<> <i>k</i> est un caract<63>re non-alphanum<75>rique) correspond au caract<63>re interpr<70>t<EFBFBD> comme un caract<63>re ordinaire, e.x &#92;&#92; correspond un caract<63>re antislash
</DD>
<DT><br><b>&#92;</b><i>c</i>
</DT><DD>o<EFBFBD> <i>c</i> est alphanum<75>rique (<28>ventuellement suivi par autre caract<63>res), un <i>escape</i> (AREs seulement), voir ESCAPES ci-dessous
</DD>
<DT><br><b>&#123;</b>
</DT><DD>quand suivi par un caract<63>re autre qu'un chiffre, correspond <20> l'accolade ouvrante `<b>&#123;</b>'; quand suivi par un chiffre, c'est le d<>but d'un <i>intervalle</i> (voir plus haut)
</DD>
<DT><br><i>x</i>
</DT><DD>o<EFBFBD> <i>x</i> est un simple caract<63>re sans autre signification, correspond <20> ce caract<63>re.
</DD>
</DL>
</div>
<div ALIGN="LEFT" style="margin-left: 51px;">Une <i>contrainte</i> correspond <20> une cha<68>ne vide quand des conditions sp<73>cifique sont rencontr<74>es. Une <i>contrainte</i> ne peut pas <20>tre suivie par un <i>quantificateur</i>. Les <i>contraintes</i> simples sont comme suit; quelques autres sont d<>crite plus tard, sous ESCAPES. </div>
<div ALIGN="LEFT" style="margin-left: 120px;">
<DL>
<DT><b>^</b></DT><DD>correspond au d<>but d'une ligne
</DD>
<DT><br><b>&#36;</b>
</DT><DD>correspond <20> la fin d'une ligne
</DD>
<DT><br><b>(?=</b><i>re</i><b>)</b>
</DT><DD><i>positive lookahead</i> (AREs seulement), correspond au point quelconque o<> une sous cha<68>ne correspondante <20> <i>re</i> commence
</DD>
<DT><br><b>(?!</b><i>re</i><b>)</b>
</DT><DD><i>negative lookahead</i> (AREs seulement), correspond au point quelconque o<> aucune sous cha<68>ne correspondante <20> <i>re</i> ne commence</DD>
</DL>
</div>
<div ALIGN="LEFT" style="margin-left: 51px;">Les <i>contraintes</i> <i>lookahead</i> ne peuvent pas contenir de r<>f<EFBFBD>rences arri<72>res (voir plus loin), et toutes parenth<74>ses <20> l'int<6E>rieur sont consider<65>es non-capturantes. </div>
<div ALIGN="LEFT" style="margin-left: 51px;">Une RE ne peut pas finir avec `<b>&#92;</b>'
</div><br>
<div><b>BRACKET EXPRESSIONS</b> (EXPRESSIONS CROCHETS)</div><br>
<div ALIGN="LEFT" style="margin-left: 51px;">Une <i>expression crochets </i> est une liste de caract<63>res entour<75>e de `<b>&#91;]</b>'. Elle correspond normalement <20> tout caract<63>re de la liste (mais voir ci-dessous). Si la liste commence avec `<b>^</b>', elle correspond <20> tout caract<63>re (mais voir ci-dessous) <i>non inclus</i> dans la liste. </div>
<div ALIGN="LEFT" style="margin-left: 51px;">Si deux caract<63>res de la liste sont s<>par<61>s par `<b>-</b>', c'est un raccourci pour l'<i>intervalle </i> complet des caract<63>res entre les deux (inclus) dans la s<>quence ordonn<6E>e, ex. <b>&#91;0-9]</b> en ASCII correspond <20> tout chiffre d<>cimal. Deux intervalles ne peuvent pas partager une limite, donc par ex. <b>a-c-e</b> est ill<6C>gal. Les intervalles sont tr<74>s d<>pendant de l'ordre de tri, et les programmes portables ne peuvent s'appuyer dessus. </div>
<div ALIGN="LEFT" style="margin-left: 51px;">Pour inclure un <b>]</b> ou <b>-</b> literal dans la liste, la m<>thode la plus simple est de l'entourer de <b>&#91;.</b> et <b>.]</b> pour en faire un&nbsp; <20>l<EFBFBD>ment d'assemblage (voir ci-dessous). Alternativement, placez le en premier (suivant un `<b>^</b>' eventuel), ou (AREs seulement) faites le preceder de `<b>&#92;</b>'. Alternativement, pour `<b>-</b>', faites en le dernier caract<63>re, ou le second point d'un intervalle. Pour utiliser un <b>-</b> literal comme le premier point d'un intervalle, faites en un <20>l<EFBFBD>ment d'assemblage ou (AREs seulement) faites le preceder de `<b>&#92;</b>'. A l'exception de ceux-ci, de toutes combinaisons utilisant <b>&#91;</b> (voir paragraphes suivant), et les echappements, tout autres des caract<63>res sp<73>ciaux perdent leur signification sp<73>ciale <20> l'int<6E>rieur d'une expression crochet. </div>
<div ALIGN="LEFT" style="margin-left: 51px;">Dans une expression crochet, un <20>l<EFBFBD>ment d'assemblage (un caract<63>re, une s<>quence multi-caract<63>re qui est assembl<62>e comme si c'etait un simple caract<63>re, ou un nom de s<>quence d'assemblage pour les deux) entour<75> de <b>&#91;.</b> et <b>.]</b> <20>quivaut <20> la s<>quence de caract<63>res de cet <20>l<EFBFBD>ment d'assemblage. La s<>quence est un seul <20>l<EFBFBD>ment de liste de l'expression crochet. Une expression crochet dans une locale qui a des <20>l<EFBFBD>ments d'assemblages multi-caract<63>re peut donc correspondre <20> plus d'un caract<63>re. Ainsi (insidieusement), une expression crochet qui commence avec <b>^</b> peut correspond <20> des <20>l<EFBFBD>ment d'assemblages multi-caract<63>re m<>me si aucun d'eux n'apparait dans l'expression crochet! (<i>Note:</i> Tcl n'a pas d'<27>l<EFBFBD>ment d'assemblages multi-caract<63>re. Cette information est seulement pr<70>sente pour&nbsp; illustration.) </div>
<div ALIGN="LEFT" style="margin-left: 51px;">Par exemple, supposez une s<>quence d'assemblage incluant un <20>l<EFBFBD>ment d'assemblage<b> ch</b> multi-caract<63>re. Ensuite la RE <b>&#91;&#91;.ch.]]*c</b> (z<>ro ou plus <b>ch</b>'s suivi par <b>c</b>) correspond les cinq premiers caract<63>res de `<b>chchcc</b>'. Egalement, la RE <b>&#91;^c]b</b> correspond <20> tout de `<b>chb</b>' (parce que <b>&#91;^c]</b> correspond au multi-caract<63>re <b>ch</b>). </div>
<div ALIGN="LEFT" style="margin-left: 51px;">Dans une expression crochet, un <20>l<EFBFBD>ment d'assemblage entour<75> de <b>&#91;=</b> et <b>=]</b> est une classe d'<27>quivalence, rempla<6C>ant la s<>quence de caract<63>res de tout <20>l<EFBFBD>ment d'assemblage <20>quivalent <20> celui-ci, incluant lui-m<>me. (Si il n'y a pas d'autre <20>l<EFBFBD>ment d'assemblage <20>quivalent, le traitement est le m<>me que si les d<>limiteurs&nbsp; <20>taient `<b>&#91;.</b>' et `<b>.]</b>'.) Par exemple, si <b>o</b> et <b><EFBFBD></b> sont les membres d'une classe d'<27>quivalence, alors `<b>&#91;&#91;=o=]]</b>', `<b>&#91;&#91;=<3D>=]]</b>', et `<b>&#91;o<EFBFBD>]</b>' sont tous synonymes. Une classe d'<27>quivalence ne peut pas <20>tre le point final d'un intervalle. (<i>Note:</i>&nbsp; Tcl impl<70>mente seulement la locale Unicode. Il ne definit aucune classes d'<27>quivalence. Les exemples pr<70>c<EFBFBD>dents sont juste des illustrations.) </div>
<div ALIGN="LEFT" style="margin-left: 51px;">Dans une expression crochet, le nom d'une <i>character class</i> entour<75>e de <b>&#91;:</b> et <b>:]</b> <20>quivaut <20> la liste de tous les caract<63>res (pas tous les <20>l<EFBFBD>ments d'assemblage!) appartenant <20> cette classe. Les classes standard de caract<63>res sont: </div>
<div ALIGN="LEFT" style="margin-left: 102px;">
<FONT FACE="Times New Roman, Times, Serif" SIZE="-5"><TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0" WIDTH="100%">
<TR>
<TD>
<b>alpha</b>
</TD>
<TD>
Une lettre.
</TD>
</TR>
<TR>
<TD>
<b>upper</b>
</TD>
<TD>
Une lettre majuscule.
</TD>
</TR>
<TR>
<TD>
<A HREF="290.htm"><b>lower</b></A>
</TD>
<TD>
Une lettre minuscule.
</TD>
</TR>
<TR>
<TD>
<b>digit</b>
</TD>
<TD>
Un chiffre d<>cimal.
</TD>
</TR>
<TR>
<TD>
<b>xdigit</b>
</TD>
<TD>
Un chiffre hexad<61>cimal.
</TD>
</TR>
<TR>
<TD>
<b>alnum</b>
</TD>
<TD>
Un caract<63>re alphanum<75>rique (lettre ou chiffre).
</TD>
</TR>
<TR>
<TD>
<b>print</b>
</TD>
<TD>
Un caract<63>re alphanum<75>rique (m<>me que <b>alnum</b>).
</TD>
</TR>
<TR>
<TD>
<b>blank</b>
</TD>
<TD>
Un espace ou tabulation.>
</TD>
</TR>
<TR>
<TD>
<b>space</b>
</TD>
<TD>
Un caract<63>re produisant un espace dans du texte affich<63>.
</TD>
</TR>
<TR>
<TD>
<b>punct</b>
</TD>
<TD>
Un caract<63>re de ponctuation.
</TD>
</TR>
<TR>
<TD>
<b>graph</b>
</TD>
<TD>
Un caract<63>re avec une repr<70>sentation visible. </TD>
</TR>
<TR>
<TD>
<b>cntrl</b>
</TD>
<TD>
Un caract<63>re de contr<74>le. </TD>
</TR>
</TABLE>
</FONT>
</div><br>
<div ALIGN="LEFT" style="margin-left: 51px;">Une locale peut en fournir d'autres. (Notez que l'impl<70>mentation Tcl courante a seulement une locale: la locale Unicode.) Une classe de caract<63>re ne peut pas <20>tre utilis<69>e comme point final d'un intervalle. </div><br>
<div ALIGN="LEFT" style="margin-left: 51px;">Il y a deux cas sp<73>ciaux d'expressions crochet: les expressions crochet <b>&#91;&#91;:&lt;:]]</b> et <b>&#91;&#91;:&gt;:]]</b> sont des contraintes, correspondant <20> des cha<68>ne vides respectivement au d<>but et <20> la fin d'un mot. Un mot est d<>fini comme une s<>quence de mots caract<63>res qui est ni pr<70>c<EFBFBD>d<EFBFBD>e&nbsp; ni suivie par des mots caract<63>res. Un mot caract<63>re est un caract<63>re <i>alnum</i> ou un underscore (<b>_</b>). Ces expressions crochet sp<73>ciales sont obsol<6F>tes; les utilisateurs d'AREs devraient utiliser les contraintes <20>chappement <20> la place (voir ci-dessous).
</div><br>
<div><b>ECHAPPEMENTS</b></div><br>
<div ALIGN="LEFT" style="margin-left: 51px;">Les echappements (AREs seulement), qui commencent avec un <b>&#92;</b> suivi d'un caract<63>re alphanum<75>rique, existent de plusieurs sortes: entr<74>e caract<63>re, classe, constraint escapes, et back r<>f<EFBFBD>rences. Un <b>&#92;</b> suivi par un caract<63>re alphanum<75>rique mais ne constituant pas un echappement valide est ill<6C>gal dans une ARE. Dans les EREs, il n'y a pas d'echappements: en dehors d'une expression crochet, un <b>&#92;</b> suivi par un caract<63>re alphanum<75>rique <20>quivaut simplement <20> cecaract<63>re comme un caract<63>re ordinaire, et dans une expression crochet, <b>&#92;</b> est un caract<63>re ordinaire. (Le dernier est une incompatibilit<69> entre les EREs et les AREs.) </div>
<div ALIGN="LEFT" style="margin-left: 51px;">Les echappements entr<74>e caract<63>re (AREs seulement) existent pour faciliter la sp<73>cification de caract<63>res non imprimables et autrement inutilisables dans REs: </div>
<div ALIGN="LEFT" style="margin-left: 120px;">
<DL>
<DT><b>&#92;a</b>
</DT><DD>caract<EFBFBD>re bip (bell), comme en C
</DD>
<DT><b>&#92;b</b></DT><DD>backspace, comme en C
</DD>
<DT><b>&#92;B</b>
</DT><DD>synonyme pour <b>&#92;</b> reduire la r<>p<EFBFBD>tition des backslash dans quelques applications ou il y a des niveaux multiples de traitement des backslash
</DD>
<DT><b>&#92;c</b><i>X</i>
</DT><DD>(o<> X est un caract<63>re quelconque) le caract<63>re dont les 5 bits de poids faible sont les m<>me que ceux de <i>X</i>, et dont les autres bits sont tous <20> z<>ro
</DD>
<DT><b>&#92;e</b>
</DT><DD>caract<EFBFBD>re dont le nom de s<>quence d'assemblage est `<b>ESC</b>', ou le caract<63>re avec une valeur octale de 033
</DD>
<DT><b>&#92;f</b>
</DT><DD>formfeed, comme en C
</DD>
<DT><b>&#92;n</b>
</DT><DD>newline, comme en C
</DD>
<DT><b>&#92;r</b>
</DT><DD>retour chariot, comme en C
</DD>
<DT><b>&#92;t</b>
</DT><DD>tabulation horizontale, comme en C
</DD>
<DT><b>&#92;u</b><i>wxyz</i>
</DT><DD>(o<> <i>wxyz</i> est exactement quatre chiffres hexad<61>cimaux) le caract<63>re Unicode <b>U+</b><i>wxyz</i> dans l' ordre d'octet local
</DD>
<DT><b>&#92;U</b><i>stuvwxyz</i>
</DT><DD>(o<> <i>stuvwxyz</i> est exactement huit chiffres hexad<61>cimaux) reserv<72> pour une extension Unicode hypoth<74>tiquel <20> 32 bits
</DD>
<DT><b>&#92;v</b>
</DT><DD>tabulation verticale, comme en C.
</DD>
<DT><b>&#92;x</b><i>hhh</i>
</DT><DD>(o<> <i>hhh</i> est une s<>quence quelconque de chiffres hexad<61>cimaux) le caract<63>re dont la valeur hexad<61>cimale est <b>0x</b><i>hhh</i> (un simple caract<63>re sans tenir compte de combien de chiffres hexad<61>cimaux sont utilis<69>s).
</DD>
<DT><b>&#92;0</b>
</DT><DD>le caract<63>re dont la valeur est <b>0</b>
</DD>
<DT><b>&#92;</b><i>xy</i></DT><DD>(o<> <i>xy</i> est exactement deux chiffres octal, et n'est pas une <i>back reference</i> (voir ci-dessous)) le caract<63>re dont la valeur octale est <b>0</b><i>xy</i>
</DD>
<DT><b>&#92;</b><i>xyz</i></DT><DD>(o<> <i>xyz</i> est exactement trois chiffres octaux, et n'est pas une back r<>f<EFBFBD>rence (voir ci-dessous)) le caract<63>re dont la valeur octale est <b>0</b><i>xyz</i>
</DD>
</DL>
</div>
<div ALIGN="LEFT" style="margin-left: 51px;">Les chiffres Hexadecimaux sont `<b>0</b>'-`<b>9</b>', `<b>a</b>-`<b>f</b>', et `<b>A</b>'-`<b>F</b>'. Les chiffres Octaux sont `<b>0</b>'-`<b>7</b>'. </div>
<div ALIGN="LEFT" style="margin-left: 51px;">Les echappements caract<63>re-entr<74>e sont toujours interpr<70>t<EFBFBD>s comme des caract<63>res ordinaires. Par exemple, <b>&#92;135</b> est <b>]</b> en ASCII, mais <b>&#92;135</b> ne peut terminer une expression crochet. Attention, n<>anmoins, que quelque application (ex.,un compilateur C) n'interpr<70>te ces s<>quences elle-m<>me avant le package regular-expression, qui peut exiger le doublage (quadruplage, etc.) du `<b>&#92;</b>'. </div>
<div ALIGN="LEFT" style="margin-left: 51px;">Les echappements Class-shorthand (AREs seulement) fournissent des raccourcis pour certaines classes de caract<63>re commun<75>ment utilis<69>es: </div>
<div ALIGN="LEFT" style="margin-left: 120px;">
<DL>
<DT><b>&#92;d</b></DT><DD><b>&#91;&#91;:digit:]]</b> </DD>
<DT><b>&#92;s</b></DT><DD><b>&#91;&#91;:space:]]</b>
</DD>
<DT><b>&#92;w</b>
</DT><DD><b>&#91;&#91;:alnum:]_]</b> (notez l'underscore)
</DD>
<DT><b>&#92;D</b>
</DT><DD><b>&#91;^&#91;:digit:]]</b> </DD>
<DT><b>&#92;S</b>
</DT><DD><b>&#91;^&#91;:space:]]</b>
</DD>
<DT><b>&#92;W</b>
</DT><DD><b>&#91;^&#91;:alnum:]_]</b> (notez l'underscore)
</DD>
</DL>
</div>
<div ALIGN="LEFT" style="margin-left: 51px;">Dans les expressions crochets, `<b>&#92;d</b>', `<b>&#92;s</b>', et `<b>&#92;w</b>' perdent leurs crochets externes, et `<b>&#92;D</b>', `<b>&#92;S</b>', et `<b>&#92;W</b>' sont ill<6C>gaux. (Ainsi, par exemple, <b>&#91;a-c&#92;d]</b> est <20>quivalent <20> <b>&#91;a-c&#91;:digit:]]</b>. Egalement, <b>&#91;a-c&#92;D]</b>, qui est <20>quivalent <20> <b>&#91;a-c^&#91;:digit:]]</b>, est illegal.) </div>
<div ALIGN="LEFT" style="margin-left: 51px;">Un constraint escape (AREs seulement) est une contrainte, correspondant <20> la cha<68>ne vide si des conditions sp<73>cifiques sont rencontr<74>es, <20>crite comme un echappement: </div>
<div ALIGN="LEFT" style="margin-left: 120px;">
<DL>
<DT><b>&#92;A</b>
</DT><DD>correspond seulement au d<>but de la cha<68>ne (voir CORRESPONDANCES, ci-dessous, pour comment ceci diff<66>re de `<b>^</b>')
</DD>
<DT><b>&#92;m</b>
</DT><DD>correspond seulement au d<>but d'un mot
</DD>
<DT><b>&#92;M</b>
</DT><DD>correspond seulement <20> la fin d'un mot
</DD>
<DT><b>&#92;y</b>
</DT><DD>correspond seulement au d<>but ou <20> la fin d'un mot
</DD>
<DT><b>&#92;Y</b>
</DT><DD>correspond seulement <20> un point qui n'est pas le d<>but ou la fin d'un mot
</DD>
<DT><b>&#92;Z</b>
</DT><DD>correspond seulement <20> la fin de la cha<68>ne (voir CORRESPONDANCES, ci-dessous, pour comment ceci diff<66>re de `<b>&#36;</b>')
</DD>
<DT><b>&#92;</b><i>m</i>
</DT><DD>(o<> <i>m</i> est un chiffre non nul) une <i>back reference</i>, voir ci-dessous
</DD>
<DT><b>&#92;</b><i>mnn</i>
</DT><DD>(o<> <i>m</i> est un chiffre non nul, et <i>nn</i> sont d'autres chiffres, et la valeur d<>cimale <i>mnn</i> n'est pas sup<75>rieure au nombre de parenth<74>ses fermantes) une <i>back reference</i>, voir ci-dessous
</DD>
</DL>
</div>
<div ALIGN="LEFT" style="margin-left: 51px;">Un mot est d<>fini comme dans la sp<73>cification de&nbsp; <b>&#91;&#91;:&lt;:]]</b> et <b>&#91;&#91;:&gt;:]]</b> plus haut. Constraint escapes sont ill<6C>gales dans les expressions crochets. </div>
<div ALIGN="LEFT" style="margin-left: 51px;">Une back r<>f<EFBFBD>rence (AREs seulement) correspond <20> la m<>me cha<68>ne que celle qui correspond aux sous expressions entre parenth<74>ses sp<73>cifi<66> par les nombres, ainsi <b>(&#91;bc])&#92;1</b> correspond <b>bb</b> ou <b>cc</b> mais pas `<b>bc</b>'. La sous expression doit enti<74>rement pr<70>c<EFBFBD>der la back r<>f<EFBFBD>rence dans la RE. Les sous expressions sont num<75>rot<6F>es dans l'ordre de leur premi<6D>res parenth<74>ses. Les parenth<74>ses non-capturantes ne d<>finissent pas de sous expressions. </div>
<div ALIGN="LEFT" style="margin-left: 51px;">Il y a une ambiguit<69> inh<6E>rente historique entre les <20>chappements caract<63>re-entr<74>e octal et les back r<>f<EFBFBD>rences, qui est r<>solue par heuristique, comme d<>voil<69> plus haut. Un z<>ro en t<>te indique toujours un <20>chappement octal. Un seul chiffre diff<66>rent de z<>ro, non suivi par un autre chiffre, est toujours interpr<70>t<EFBFBD> comme une back r<>f<EFBFBD>rence. Une s<>quence multi-chiffre ne commen<65>ant pas avec un z<>ro est interpr<70>t<EFBFBD>e comme une back r<>f<EFBFBD>rence si elle est situ<74>e apr<70>s une sous expression convenable (ex. le nombre est dans l'intervalle l<>gal pour une back r<>f<EFBFBD>rence), et autrement est interpr<70>t<EFBFBD>e comme octale. </div><br>
<div><b>METASYNTAXE</b></div><br>
<div ALIGN="LEFT" style="margin-left: 51px;">En plus de la syntaxe principale d<>crite plus haut, il y a quelques formes sp<73>ciales et diverses facilit<69>s syntaxiques disponibles. </div>
<div ALIGN="LEFT" style="margin-left: 51px;">Normalement la sorte de RE utilis<69>e est sp<73>cifi<66>e par l'application. N<>anmoins, ceci peut <20>tre modifi<66> par un <i>director</i>. Si un RE d'une sorte quelconque commence avec `<b>***:</b>', le reste de la RE est une ARE. Si une RE d'une sorte quelconque commence avec `<b>***=</b>', le reste de la RE est pris comme une cha<68>ne litt<74>rale, avec tous les caract<63>res consider<65>s comme des caract<63>res ordinaires. </div>
<div ALIGN="LEFT" style="margin-left: 51px;">Une ARE peut commencer avec des <i>contenue options</i>: une s<>quence <b>(?</b><i>xyz</i><b>)</b> (o<> <i>xyz</i> est un ou plusieurs caract<63>res alphab<61>tiques) sp<73>cifie les options affectant le reste de la RE. Ceci vient en suppl<70>ment, et peut modifier toute option sp<73>cifi<66>e par l'application. Le lettres d'option disponibles sont: </div>
<div ALIGN="LEFT" style="margin-left: 120px;">
<DL>
<DT><b>b</b>
</DT><DD>le reste de la RE est une BRE
</DD>
<DT><b>c</b>
</DT><DD>correspondance sensible <20> la casse (par d<>faut)
</DD>
<DT><b>e</b>
</DT><DD>le reste de la RE est une ERE
</DD>
<DT><b>i</b>
</DT><DD>correspondance insensible <20> la casse (voir CORRESPONDANCES, ci-dessous)
</DD>
<DT><b>m</b>
</DT><DD>synonyme historique de <b>n</b>
</DD>
<DT><b>n</b>
</DT><DD>correspondance sensible au saut de ligne(voir CORRESPONDANCES, ci-dessous)
</DD>
<DT><b>p</b>
</DT><DD>correspondance partiellement sensible au saut de ligne (voir CORRESPONDANCES, ci-dessous)
</DD>
<DT><b>q</b>
</DT><DD>le reste de la RE est une cha<68>ne litt<74>rale (&quot;entre guillemets&quot;), toute de caract<63>res ordinaires
</DD>
<DT><b>s</b>
</DT><DD>correspondance insensible au saut de ligne (par d<>faut)
</DD>
<DT><b>t</b>
</DT><DD>syntaxe s<>rr<72>e (par d<>faut; voir ci-dessous)
</DD>
<DT><b>w</b>
</DT><DD>correspondance inverse partiellement sensible au saut de ligne (&quot;weird&quot;) (voir CORRESPONDANCES, ci-dessous)
</DD>
<DT><b>x</b></DT><DD>syntaxe expans<6E>e (voir ci-dessous)</DD>
</DL>
</div>
<div ALIGN="LEFT" style="margin-left: 51px;">Les options incluses prennent effet <20> la <b>)</b> terminant la s<>quence. Elles sont disponibles seulement au d<>but d'une ARE, et ne peuvent pas <20>tre utilis<69>es plus loin. </div>
<div ALIGN="LEFT" style="margin-left: 51px;">En plus de la syntaxe usuelle (<i>tight</i>) RE, dans laquelle tous les caract<63>res sont signifiants, il y a une syntaxe <i>expans<EFBFBD>e</i>, disponible dans toutes les sortes de RE avec le switch<b> -expanded</b>, ou dans les&nbsp; AREs avec l'option <b>x</b>. Dans la syntaxe expans<6E>e, les espaces sont ignor<6F>s et tout caract<63>re entre un <b>#</b> et les newline suivantes (ou la fin de la RE) sont ignor<6F>, permettant de paragrapher et de commenter une RE complexe. Il y a trois exceptions <20> cette r<>gle de base: </div>
<div ALIGN="LEFT" style="margin-left: 102px;">un espace ou un `<b>#</b>' pr<70>c<EFBFBD>d<EFBFBD>s&nbsp; par `<b>&#92;</b>' est retenu </div>
<div ALIGN="LEFT" style="margin-left: 102px;">un espace ou un `<b>#</b>' <20> l'int<6E>rieur d'une expression crochet est retenu </div>
<div ALIGN="LEFT" style="margin-left: 102px;">un espace et des commentaires sont ill<6C>gaux dans les symboles multi-caract<63>res comme le `<b>(?:</b>' ARE ou le `<b>&#92;(</b> ' BRE</div><br>
<div ALIGN="LEFT" style="margin-left: 51px;">Les caract<63>res espace de la syntaxe expans<6E>e sont le blank, tab, newline, et tout caract<63>re qui appartient <20> la classe de caract<63>re<i> space</i>. </div>
<div ALIGN="LEFT" style="margin-left: 51px;">Finalement, dans une ARE, en dehors des expressions crochet, la s<>quence `<b>(?#</b><i>ttt</i><b>)</b>' (o<> <i>ttt</i> est un texte quelconque ne contenant pas de `<b>)</b>') est un commentaire, compl<70>tement ignor<6F>. De m<>me, ceci n'est pas autoris<69> entre les caract<63>res de symboles multi-caract<63>re comme `<b>(?:</b>'. Ces commentaires sont plus un artefact historique que une utile facilit<69>, et leur usage est obsol<6F>te; utilisez plutot la syntaxe expans<6E>e de. </div>
<div ALIGN="LEFT" style="margin-left: 51px;"><i>Aucune</i> de ces extensions de m<>tasyntaxe ne sont disponibles si l'application (ou un director initial <b>***=</b>) a sp<73>cifi<66> que les entr<74>es de l'utilisateur doivent <20>tre trait<69>es comme une cha<68>ne litt<74>rale plut<75>t que comme une RE.
</div><br>
<div><b>CORRESPONDANCES</b></div><br>
<div ALIGN="LEFT" style="margin-left: 51px;">Dans l'<27>v<EFBFBD>nement o<> une RE peut correspondre <20> plus d'une sous cha<68>ne d'une cha<68>ne donn<6E>e, la RE correspond <20> la premi<6D>re occurence dans la cha<68>ne. Si la RE peut correspondre <20> plus d'une sous cha<68>ne commen<65>ant <20> ce point, le choix est d<>termin<69> par sa <i>pr<EFBFBD>f<EFBFBD>rence</i>: soit la plus longue sous cha<68>ne, soit la plus courte. </div>
<div ALIGN="LEFT" style="margin-left: 51px;">La plupart des atomes, et toutes les contraintes, n'ont pas de pr<70>f<EFBFBD>rence. Une RE entre parenth<74>ses a la m<>me pr<70>f<EFBFBD>rence (<28>ventuellement aucune) que la RE. Un atome quantifi<66> avec <b>&#123;</b><i>m</i><b>}</b> ou <b>&#123;</b><i>m</i><b>}?</b> a la m<>me pr<70>f<EFBFBD>rence (<28>ventuellement aucune)que l'atome lui-m<>me. Un atome quantifi<66> avec d'autres quantificateurs normaux (incluant <b>&#123;</b><i>m</i><b>,</b><i>n</i><b>}</b> avec <i>m</i> <20>gal <20> <i>n</i>) pref<65>re la correspondance la plus longue. Un atome quantifi<66> avec d'autre quantificateurs non-greedy (incluant <b>&#123;</b><i>m</i><b>,</b><i>n</i><b>}?</b> avec <i>m</i> <20>gal <20> <i>n</i>) pref<65>re la correspondance la plus courte. Une branche a la m<>me pr<70>f<EFBFBD>rence que le premier atome quantifi<66> inclus qui a une pr<70>f<EFBFBD>rence. Une RE consistant de deux branches ou plus connect<63>es par l'op<6F>rateur <b>|</b> pr<70>f<EFBFBD>re la correspondance la plus longue.</div>
<div ALIGN="LEFT" style="margin-left: 51px;">Sujettes aux contraintes impos<6F>es par les r<>gles de correspondance <20> la totalit<69> de la RE, les sous-expressions correspondent au sous-cha<68>nes les plus longues ou les plus courtes possible, bas<61>es sur leurs preferences, avec les sous-expressions commen<65>ant en premier dans la RE prioritaires sur celles commen<65>ant plus loin. Notez que les sous-expressions prennent le pas sur leurs sous-expressions internes. </div>
<div ALIGN="LEFT" style="margin-left: 51px;">Notez que les quantificateurs <b>&#123;1,1}</b> et <b>&#123;1,1}?</b> peuvent <20>tre utilis<69>s pour forcer la pr<70>f<EFBFBD>rence, sur une sous-expression ou une RE compl<70>te. </div>
<div ALIGN="LEFT" style="margin-left: 51px;">Les longueurs des correpondances sont mesur<75>es en caract<63>res, pas en <20>l<EFBFBD>ments d'assemblage. Une cha<68>ne vide est consider<65>e plus longue qu'aucune correspondance. Par exemple, <b>bb*</b> correspond aux trois caract<63>res cebtraux de `<b>abbbc</b>', <b>(week|wee)(night|knights)</b> correspond aux dix caract<63>res de `<b>weeknights</b>', quand <b>(.*).*</b> est compar<61> <20> <b>abc</b> la sous-expression entre parenth<74>ses correspond aux trois caract<63>res, et quand <b>(a*)*</b> est compar<61> <20> <b>bc</b> <20> la fois la RE compl<70>te et la sous-expression entre parenth<74>ses correspond <20> une cha<68>ne vide. </div>
<div ALIGN="LEFT" style="margin-left: 51px;">Si une correspondance ind<6E>pendante de la casse est sp<73>cifi<66>e, l'effet est le m<>me que si toute distinction de casse avait disparu de l'alphabet. Quand un caract<63>re qui existe dans les deux casses apparait comme un caract<63>re ordinaire en dehors d'une expression crochet, il est effectivement transforme en une expression crochet contenant les deux casses, ainsi <b>x</b> devient `<b>&#91;xX]</b>'. Quand il apparait dans une expression crochet, toute contrepartie de sa casse est&nbsp; ajout<75>e <20> l'expression crochet, ainsi <b>&#91;x]</b> devient <b>&#91;xX]</b> et <b>&#91;^x]</b> devient `<b>&#91;^xX]</b>'. </div>
<div ALIGN="LEFT" style="margin-left: 51px;">Si une correspondance sensible au saut de ligne est sp<73>cifi<66>e, les expressions <b>.</b> et crochets utilisant <b>^</b> ne correspondront&nbsp; jamais au caract<63>re newline (ainsi la correspondance ne traverse jamais les saut de lignes <20> moins que la RE le demande explicitement ) et <b>^</b> et <b>&#36;</b> correspondront <20> la cha<68>ne vide respectivement apr<70>s et avant un saut de ligne, en plus de correspondre respectivement au d<>but et <20> la fin d'une cha<68>ne. Les <b>&#92;A</b> et <b>&#92;Z</b> ARE continuent <20> correspondre au d<>but et <20> la fin d'une cha<68>ne<i> seulement</i>. </div>
<div ALIGN="LEFT" style="margin-left: 51px;">Si une correspondance sensible au saut de ligne partielle est sp<73>cifi<66>e, elle affecte les expressions <b>.</b> et crochets comme la correspondance sensible au saut de ligne, mais pas <b>^</b> et `<b>&#36;</b>'. </div>
<div ALIGN="LEFT" style="margin-left: 51px;">Si une correspondance sensible au saut de ligne partielle inverse est sp<73>cifi<66>e, elle affecte <b>^</b> et <b>&#36;</b> comme la correspondance sensible au saut de ligne, mais pas les expressions <b>.</b> et crochets. Ceci n'est pas tr<74>s utile mais est fourni pour la sym<79>trie
</div><br>
<div><b>LIMITES ET COMPATIBILITE</b></div><br>
<div ALIGN="LEFT" style="margin-left: 51px;">Aucune limite particuli<6C>re n'est impos<6F>e <20> la longueur des REs. Les programmes con<6F>ue pour <20>tre hautement portables ne devront pas employer de REs plus longues que 256 octets, car une impl<70>mentation POSIX-compatible peut les refuser. </div>
<div ALIGN="LEFT" style="margin-left: 51px;">La seule fonctionnalit<69> des AREs actuellement incompatible avec les EREs POSIX est que <b>&#92;</b> ne perd pas sa signification sp<73>ciale <20> l'int<6E>rieur des expression crochets. Toutes les autres fonctionnalit<69>s ARE utilisent une syntaxe qui est ill<6C>gale ou a des effets ind<6E>finis ou non specifi<66>s dans les EREs POSIX; la syntaxe <A HREF="24.htm"><b>***</b></A> des directors est de m<>me en dehors de la syntaxe POSIX pour les BREs et les EREs. </div>
<div ALIGN="LEFT" style="margin-left: 51px;">Beaucoup des extensions ARE sont extraites de Perl, mais quelques unes ont <20>t<EFBFBD> nettoy<6F>es, et quelques extensions Perl ne sont pas pr<70>sentes. Les incompatibilit<69>s inclutnt `<b>&#92;b</b>', `<b>&#92;B</b>', l'absence de traitement sp<73>cial pour un newline <20> la fin, l'addition d'expression crochets pour les cas affect<63>s par la correspondance sensible au saut de ligne, les restrictions sur les parenth<74>ses et les back r<>f<EFBFBD>rences dans les contraintes avant, et la s<>mantique des correspondances plus long/plus court (plut<75>t que premier-trouv<75>). </div>
<div ALIGN="LEFT" style="margin-left: 51px;">Les r<>gles de correspondance pour les REs contenant <20> la fois des quantificateurs normaux et non-greedy ont chang<6E> depuis les premi<6D>res versions beta-test de ce package. (Les nouvelles r<>gles sont plus simples et plus propre, mais ne travaillent pas trop dur pour deviner les intentions r<>elles de l'utilisateur.) </div>
<div ALIGN="LEFT" style="margin-left: 51px;">Le package original <i>regexp</i> de 1986 par Henry Spencer, toujours largement utilis<69> (ex., dans les pre-8.1 releases de Tcl), impl<70>mentait une premi<6D>re version des EREs d'aujourd'hui. Il y a quatre incompatibilit<69>s entre les <i>regexp</i>&nbsp; proches des EREs (`RREs') et les AREs. Dans un ordre croissant de signification: </div>
<div ALIGN="LEFT" style="margin-left: 102px;">Dans les AREs, <b>&#92;</b> suivi d'un caract<63>re alphanum<75>rique est soit un <20>chappement soit une erreur, alors que dans les RREs, c'<27>tait juste un autre moyen d'<27>crire l'alphanum<75>rique. Ceci ne sera pas une probl<62>me parce que il n'y a pas de raison d'<27>crire une s<>quence pareille dans les RREs. </div>
<div ALIGN="LEFT" style="margin-left: 102px;">Un<b> &#123;</b> suivi d'un chiffre dans un ARE est le d<>but d'un intervalle, alors que dans les RREs, <b>&#123;</b> a toujours <20>t<EFBFBD> un caract<63>re ordinaire. De telles s<>quences seront rares, et donneront souvent une erreur parce que les caract<63>res suivants ne ressembleront pas <20> un intervalle valide. </div>
<div ALIGN="LEFT" style="margin-left: 102px;">Dans les AREs, <b>&#92;</b> introduit un caract<63>re sp<73>cial dans `<b>&#91;]</b>', donc un <b>&#92;</b> litt<74>ral dans <b>&#91;]</b> doit <20>tre <20>crit `<b>&#92;&#92;</b>'. <b>&#92;&#92;</b> donne aussi un <b>&#92;</b> litt<74>ral dans <b>&#91;]</b> dans les RREs, mais seuls les programmeurs vraiment parano&iuml;aques doublent le backslash par routine. </div>
<div ALIGN="LEFT" style="margin-left: 102px;">AREs rapporte la plus longue/plus courte correspondance de la RE, plut<75>t que le premier trouv<75> dans l'ordre de recherche sp<73>cifi<66>. Ceci peut affecter quelque RREs qui aurait <20>t<EFBFBD> <20>crites dans l'hypoth<74>se o<> la premi<6D>re correspondance serait rapport<72>e. (La r<>daction soigneuse des RREs pour optimiser l'ordre de recherche pour une comparaison rapide est obsol<6F>te (les AREs examinent toutes les correspondances possible en parall<6C>le, et leurs performances sont largement insensible <20> leur complexit<69>) mais les cas o<> l'ordre de recherche a <20>t<EFBFBD> exploit<69> pour trouver delib<69>r<EFBFBD>ment une correspondance qui n'est pas la plus longue/plus courte devront <20>tre r<><72>crits.)
</div><br>
<div><b>BASIC REGULAR EXPRESSIONS</b></div><br>
<div ALIGN="LEFT" style="margin-left: 51px;">Les BREs diff<66>rent des EREs sous plusieurs aspects `<b>|</b>', `<b>+</b>', et <b>?</b> sont des caract<63>res ordinaires et il n'y a pas d'<27>quivalent <20> leurs fonctionalit<69>. Les d<>limiteurs des intervalles sont <b>&#92;&#123;</b> et `<b>&#92;}</b>', avec les <b>&#123;</b> et <b>}</b> interpr<70>t<EFBFBD>es seules comme des caract<63>res ordinaires. Les parenth<74>ses des sous expressions imbriqu<71>es sont <b>&#92;(</b> et `<b>&#92;)</b>', avec les <b>(</b> et <b>)</b> interpr<70>t<EFBFBD>es seules comme des caract<63>res ordinaires. <b>^</b> est un caract<63>re ordinaire except<70> au d<>but de la RE ou au d<>but d'une sous expressions entre parenth<74>ses, <b>&#36;</b> est un caract<63>re ordinaire except<70> <20> la fin de la RE ou la fin d'une sous expressions entre parenth<74>ses, et <A HREF="24.htm"><b>*</b></A> est un caract<63>re ordinaire s'il apparait au d<>but de la RE ou au d<>but d'une sous-expression entre parenth<74>ses (apr<70>s un `<b>^</b>'possible en t<>te). Finalement, les back r<>f<EFBFBD>rences <20> un seul chiffre sont disponibles, et <b>&#92;&lt;</b> et <b>&#92;&gt;</b> sont des synonymes de <b>&#91;&#91;:&lt;:]]</b> et <b>&#91;&#91;:&gt;:]]</b> respectivement; aucun autre echappement ne sont disponibles
</div><br>
<div><b>VOIR EGALEMENT</b></div><br>
<div ALIGN="LEFT" style="margin-left: 51px;">RegExp(3.htm), <A HREF="152.htm">regexp</A>(n), <A HREF="154.htm">regsub</A>(n), <A HREF="137.htm">lsearch</A>(n), <A HREF="167.htm">switch</A>(n), text(n) </div><br>
<div>Derni<EFBFBD>re r<>vision: 8.1</div>
<br>
<br><div ALIGN="CENTER"><A HREF="index.htm"><b>Index</b></A>&nbsp;&nbsp;<A HREF="149.htm"><b>Pr<EFBFBD>c<EFBFBD>dent</b></A>&nbsp;&nbsp;<A HREF="151.htm"><b>Suivant</b></A></div>
</BODY></HTML>