Eggdrop & Tcl

Base de connaissances eggdrop et tcl

Outils pour utilisateurs

Outils du site


faq:re_syntax

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
faq:re_syntax [2023/10/11 08:58] – [Bracket expressions] CrazyCatfaq:re_syntax [2023/10/19 12:52] (Version actuelle) – [Expressions rationnelles basiques] CrazyCat
Ligne 62: Ligne 62:
 Par exemple, supposez une séquence d'assemblage incluant un élément d'assemblage ch multi-caractère. Ensuite la RE [[.ch.]]*c (zéro ou plus ch's suivi par c) correspond les cinq premiers caractères de `chchcc`. Également, la RE [^c]b correspond à tout de `chb` (parce que [^c] correspond au multi-caractère ch). Par exemple, supposez une séquence d'assemblage incluant un élément d'assemblage ch multi-caractère. Ensuite la RE [[.ch.]]*c (zéro ou plus ch's suivi par c) correspond les cinq premiers caractères de `chchcc`. Également, la RE [^c]b correspond à tout de `chb` (parce que [^c] correspond au multi-caractère ch).
  
-Dans une expression crochet, un élément d'assemblage entouré de [= et =] est une classe d'équivalence, remplaçant la séquence de caractères de tout élément d'assemblage équivalent à celui-ci, incluant lui-même. (Si il n'y a pas d'autre élément d'assemblage équivalent, le traitement est le même que si les délimiteurs étaient `[.` et `.]`.) Par exemple, si o et ô sont les membres d'une classe d'équivalence, alors `[[=o=]]`, `[[=ô=]]`, et `[oô]` sont tous synonymes. Une classe d'équivalence ne peut pas être le point final d'un intervalle. (Note: Tcl implémente seulement la locale Unicode. Il ne définit aucune classes d'équivalence. Les exemples précédents sont juste des illustrations.)+Dans une expression crochet, un élément d'assemblage entouré de [= et =] est une classe d'équivalence, remplaçant la séquence de caractères de tout élément d'assemblage équivalent à celui-ci, incluant lui-même. (Si il n'y a pas d'autre élément d'assemblage équivalent, le traitement est le même que si les délimiteurs étaient `[.` et `.]`.) Par exemple, si o et ô sont les membres d'une classe d'équivalence, alors `<nowiki>[[=o=]]</nowiki>`, `<nowiki>[[=ô=]]</nowiki>`, et `[oô]` sont tous synonymes. Une classe d'équivalence ne peut pas être le point final d'un intervalle. (Note: Tcl implémente seulement la locale Unicode. Il ne définit aucune classes d'équivalence. Les exemples précédents sont juste des illustrations.)
  
 Dans une expression crochet, le nom d'une character class entourée de [: et :] équivaut à la liste de tous les caractères (pas tous les éléments d'assemblage!) appartenant à cette classe. Les classes standard de caractères sont: Dans une expression crochet, le nom d'une character class entourée de [: et :] équivaut à la liste de tous les caractères (pas tous les éléments d'assemblage!) appartenant à cette classe. Les classes standard de caractères sont:
Ligne 80: Ligne 80:
 Une locale peut en fournir d'autres. (Notez que l'implémentation Tcl courante a seulement une locale: la locale Unicode.) Une classe de caractère ne peut pas être utilisée comme point final d'un intervalle. Une locale peut en fournir d'autres. (Notez que l'implémentation Tcl courante a seulement une locale: la locale Unicode.) Une classe de caractère ne peut pas être utilisée comme point final d'un intervalle.
  
-Il y a deux cas spéciaux d'expressions crochet: les expressions crochet [[:<:]] et [[:>:]] sont des contraintes, correspondant à des chaîne vides respectivement au début et à la fin d'un mot. Un mot est défini comme une séquence de mots caractères qui est ni précédée ni suivie par des mots caractères. Un mot caractère est un caractère alnum ou un underscore (_). Ces expressions crochet spéciales sont obsolètes; les utilisateurs d'AREs devraient utiliser les contraintes échappement à la place (voir ci-dessous).+Il y a deux cas spéciaux d'expressions crochet: les expressions crochet `<nowiki>[[:<:]]</nowiki>et `<nowiki>[[:>:]]</nowiki>sont des contraintes, correspondant à des chaîne vides respectivement au début et à la fin d'un mot. Un mot est défini comme une séquence de mots caractères qui est ni précédée ni suivie par des mots caractères. Un mot caractère est un caractère alnum ou un underscore (_). Ces expressions crochet spéciales sont obsolètes; les utilisateurs d'AREs devraient utiliser les contraintes échappement à la place (voir ci-dessous).
  
 ==== Echappements ==== ==== Echappements ====
Ligne 103: Ligne 103:
   * <kbd>\0</kbd> le caractère dont la valeur est 0   * <kbd>\0</kbd> le caractère dont la valeur est 0
   * <kbd>\xy</kbd> (où //xy// est exactement deux chiffres octal, et n'est pas une back reference (voir ci-dessous)) le caractère dont la valeur octale est 0xy   * <kbd>\xy</kbd> (où //xy// est exactement deux chiffres octal, et n'est pas une back reference (voir ci-dessous)) le caractère dont la valeur octale est 0xy
-  * <kbd>\xyz<kbd> (où //xyz// est exactement trois chiffres octaux, et n'est pas une back référence (voir ci-dessous)) le caractère dont la valeur octale est 0xyz+  * <kbd>\xyz</kbd> (où //xyz// est exactement trois chiffres octaux, et n'est pas une back référence (voir ci-dessous)) le caractère dont la valeur octale est 0xyz
  
 Les chiffres Hexadécimaux sont `0`-`9`, `a`-`f`, et `A`-`F`. Les chiffres Octaux sont `0`-`7`. Les chiffres Hexadécimaux sont `0`-`9`, `a`-`f`, et `A`-`F`. Les chiffres Octaux sont `0`-`7`.
Ligne 110: Ligne 110:
  
 Les échappements Class-shorthand (AREs seulement) fournissent des raccourcis pour certaines classes de caractère communément utilisées: Les échappements Class-shorthand (AREs seulement) fournissent des raccourcis pour certaines classes de caractère communément utilisées:
-  * \d \[\[:digit:]] +  * \d <nowiki>[[:digit:]]</nowiki> 
-  * \s \[\[:space:]] +  * \s <nowiki>[[:space:]]</nowiki> 
-  * \w \[\[:alnum:]_] (notez l'underscore)+  * \w <nowiki>[[:alnum:]_]</nowiki> (notez l'underscore)
   * \D [^[:digit:]]   * \D [^[:digit:]]
   * \S [^[:space:]]   * \S [^[:space:]]
Ligne 129: Ligne 129:
   * \mnn (où m est un chiffre non nul, et nn sont d'autres chiffres, et la valeur décimale mnn n'est pas supérieure au nombre de parenthèses fermantes) une back reference, voir ci-dessous   * \mnn (où m est un chiffre non nul, et nn sont d'autres chiffres, et la valeur décimale mnn n'est pas supérieure au nombre de parenthèses fermantes) une back reference, voir ci-dessous
  
-Un mot est défini comme dans la spécification de [[:<:]] et [[:>:]] plus haut. Constraint escapes sont illégales dans les expressions crochets.+Un mot est défini comme dans la spécification de \[\[:<:]] et \[\[:>:]] plus haut. Constraint escapes sont illégales dans les expressions crochets.
  
-Une back référence (AREs seulement) correspond à la même chaîne que celle qui correspond aux sous expressions entre parenthèses spécifié par les nombres, ainsi ([bc])\1 correspond bb ou cc mais pas `bc'. La sous expression doit entièrement précéder la back référence dans la RE. Les sous expressions sont numérotées dans l'ordre de leur premières parenthèses. Les parenthèses non-capturantes ne définissent pas de sous expressions.+Une back référence (AREs seulement) correspond à la même chaîne que celle qui correspond aux sous expressions entre parenthèses spécifié par les nombres, ainsi ([bc])\1 correspond bb ou cc mais pas `bc`. La sous expression doit entièrement précéder la back référence dans la RE. Les sous expressions sont numérotées dans l'ordre de leur premières parenthèses. Les parenthèses non-capturantes ne définissent pas de sous expressions.
  
 Il y a une ambiguïté inhérente historique entre les échappements caractère-entrée octal et les back références, qui est résolue par heuristique, comme dévoilé plus haut. Un zéro en tête indique toujours un échappement octal. Un seul chiffre différent de zéro, non suivi par un autre chiffre, est toujours interprété comme une back référence. Une séquence multi-chiffre ne commençant pas avec un zéro est interprétée comme une back référence si elle est située après une sous expression convenable (ex. le nombre est dans l'intervalle légal pour une back référence), et autrement est interprétée comme octale. Il y a une ambiguïté inhérente historique entre les échappements caractère-entrée octal et les back références, qui est résolue par heuristique, comme dévoilé plus haut. Un zéro en tête indique toujours un échappement octal. Un seul chiffre différent de zéro, non suivi par un autre chiffre, est toujours interprété comme une back référence. Une séquence multi-chiffre ne commençant pas avec un zéro est interprétée comme une back référence si elle est située après une sous expression convenable (ex. le nombre est dans l'intervalle légal pour une back référence), et autrement est interprétée comme octale.
Ligne 137: Ligne 137:
 En plus de la syntaxe principale décrite plus haut, il y a quelques formes spéciales et diverses facilités syntaxiques disponibles. En plus de la syntaxe principale décrite plus haut, il y a quelques formes spéciales et diverses facilités syntaxiques disponibles.
  
-Normalement la sorte de RE utilisée est spécifiée par l'application. Néanmoins, ceci peut être modifié par un director. Si un RE d'une sorte quelconque commence avec `***:`, le reste de la RE est une ARE. Si une RE d'une sorte quelconque commence avec `***=`, le reste de la RE est pris comme une chaîne littérale, avec tous les caractères considérés comme des caractères ordinaires.+Normalement la sorte de RE utilisée est spécifiée par l'application. Néanmoins, ceci peut être modifié par un director. Si un RE d'une sorte quelconque commence avec `<nowiki>***</nowiki>:`, le reste de la RE est une ARE. Si une RE d'une sorte quelconque commence avec `<nowiki>***</nowiki>=`, le reste de la RE est pris comme une chaîne littérale, avec tous les caractères considérés comme des caractères ordinaires.
  
 Une ARE peut commencer avec des contenue options: une séquence (?xyz) (où xyz est un ou plusieurs caractères alphabétiques) spécifie les options affectant le reste de la RE. Ceci vient en supplément, et peut modifier toute option spécifiée par l'application. Le lettres d'option disponibles sont: Une ARE peut commencer avec des contenue options: une séquence (?xyz) (où xyz est un ou plusieurs caractères alphabétiques) spécifie les options affectant le reste de la RE. Ceci vient en supplément, et peut modifier toute option spécifiée par l'application. Le lettres d'option disponibles sont:
Ligne 164: Ligne 164:
 Finalement, dans une ARE, en dehors des expressions crochet, la séquence `(?#ttt)` (où ttt est un texte quelconque ne contenant pas de `)`) est un commentaire, complètement ignoré. De même, ceci n'est pas autorisé entre les caractères de symboles multi-caractère comme `(?:`. Ces commentaires sont plus un artefact historique que une utile facilité, et leur usage est obsolète; utilisez plutôt la syntaxe expansée de. Finalement, dans une ARE, en dehors des expressions crochet, la séquence `(?#ttt)` (où ttt est un texte quelconque ne contenant pas de `)`) est un commentaire, complètement ignoré. De même, ceci n'est pas autorisé entre les caractères de symboles multi-caractère comme `(?:`. Ces commentaires sont plus un artefact historique que une utile facilité, et leur usage est obsolète; utilisez plutôt la syntaxe expansée de.
  
-Aucune de ces extensions de méta-syntaxe ne sont disponibles si l'application (ou un director initial ***=) a spécifié que les entrées de l'utilisateur doivent être traitées comme une chaîne littérale plutôt que comme une RE.+Aucune de ces extensions de méta-syntaxe ne sont disponibles si l'application (ou un director initial <nowiki>***=</nowiki>) a spécifié que les entrées de l'utilisateur doivent être traitées comme une chaîne littérale plutôt que comme une RE.
 ==== Correspondances ==== ==== Correspondances ====
 Dans l’événement où une RE peut correspondre à plus d'une sous chaîne d'une chaîne donnée, la RE correspond à la première occurrence dans la chaîne. Si la RE peut correspondre à plus d'une sous chaîne commençant à ce point, le choix est déterminé par sa préférence: soit la plus longue sous chaîne, soit la plus courte. Dans l’événement où une RE peut correspondre à plus d'une sous chaîne d'une chaîne donnée, la RE correspond à la première occurrence dans la chaîne. Si la RE peut correspondre à plus d'une sous chaîne commençant à ce point, le choix est déterminé par sa préférence: soit la plus longue sous chaîne, soit la plus courte.
Ligne 192: Ligne 192:
 Les règles de correspondance pour les REs contenant à la fois des quantificateurs normaux et non-greedy ont changé depuis les premiè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.) Les règles de correspondance pour les REs contenant à la fois des quantificateurs normaux et non-greedy ont changé depuis les premiè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.)
  
-Le package original regexp de 1986 par Henry Spencer, toujours largement utilisé (ex., dans les pre-8.1 releases de Tcl), implémentait une première version des EREs d'aujourd'hui. Il y a quatre incompatibilités entre les regexp proches des EREs (`RREs') et les AREs. Dans un ordre croissant de signification:+Le package original regexp de 1986 par Henry Spencer, toujours largement utilisé (ex., dans les pre-8.1 releases de Tcl), implémentait une première version des EREs d'aujourd'hui. Il y a quatre incompatibilités entre les regexp proches des EREs (`RREs`) et les AREs. Dans un ordre croissant de signification:
  
 Dans les AREs, \ suivi d'un caractère alphanumérique est soit un échappement soit une erreur, alors que dans les RREs, c'était juste un autre moyen d'écrire l'alphanumérique. Ceci ne sera pas une problème parce que il n'y a pas de raison d'écrire une séquence pareille dans les RREs. Dans les AREs, \ suivi d'un caractère alphanumérique est soit un échappement soit une erreur, alors que dans les RREs, c'était juste un autre moyen d'écrire l'alphanumérique. Ceci ne sera pas une problème parce que il n'y a pas de raison d'écrire une séquence pareille dans les RREs.
Ligne 202: Ligne 202:
 AREs rapporte la plus longue/plus courte correspondance de la RE, plutôt que le premier trouvé dans l'ordre de recherche spécifié. Ceci peut affecter quelque RREs qui aurait été écrites dans l'hypothèse où la première correspondance serait rapportée. (La rédaction soigneuse des RREs pour optimiser l'ordre de recherche pour une comparaison rapide est obsolète (les AREs examinent toutes les correspondances possible en parallèle, et leurs performances sont largement insensible à leur complexité) mais les cas où l'ordre de recherche a été exploité pour trouver delibérément une correspondance qui n'est pas la plus longue/plus courte devront être réécrits.) AREs rapporte la plus longue/plus courte correspondance de la RE, plutôt que le premier trouvé dans l'ordre de recherche spécifié. Ceci peut affecter quelque RREs qui aurait été écrites dans l'hypothèse où la première correspondance serait rapportée. (La rédaction soigneuse des RREs pour optimiser l'ordre de recherche pour une comparaison rapide est obsolète (les AREs examinent toutes les correspondances possible en parallèle, et leurs performances sont largement insensible à leur complexité) mais les cas où l'ordre de recherche a été exploité pour trouver delibérément une correspondance qui n'est pas la plus longue/plus courte devront être réécrits.)
 ==== Expressions rationnelles basiques ==== ==== Expressions rationnelles basiques ====
-Les BREs diffèrent des EREs sous plusieurs aspects `|`, `+`, et ? sont des caractères ordinaires et il n'y a pas d'équivalent à leurs fonctionnalité. Les délimiteurs des intervalles sont `\{` et `\}`, avec les { et } interprétées seules comme des caractères ordinaires. Les parenthèses des sous expressions imbriquées sont `\(` et `\)`, avec les ( et ) interprétées seules comme des caractères ordinaires. ^ est un caractère ordinaire excepté au début de la RE ou au début d'une sous expressions entre parenthèses, $ est un caractère ordinaire excepté à la fin de la RE ou la fin d'une sous expressions entre parenthèses, et [24] est un caractère ordinaire s'il apparaît au début de la RE ou au début d'une sous-expression entre parenthèses (après un `^`possible en tête). Finalement, les back références à un seul chiffre sont disponibles, et \< et \> sont des synonymes de [[:<:]] et [[:>:]] respectivement ; aucun autre échappement ne sont disponibles+Les BREs diffèrent des EREs sous plusieurs aspects
 +  * `|`, `+`, et ? sont des caractères ordinaires et il n'y a pas d'équivalent à leurs fonctionnalité. 
 +  * Les délimiteurs des intervalles sont `\{` et `\}`, avec les <kbd>{</kbd> et <kbd>}</kbd> interprétées seules comme des caractères ordinaires. 
 +  * Les parenthèses des sous expressions imbriquées sont `\(` et `\)`, avec les <kbd>(</kbd> et <kbd>)</kbd> interprétées seules comme des caractères ordinaires. 
 +  * `^est un caractère ordinaire excepté au début de la RE ou au début d'une sous expressions entre parenthèses, `$est un caractère ordinaire excepté à la fin de la RE ou la fin d'une sous expressions entre parenthèses, et [24] est un caractère ordinaire s'il apparaît au début de la RE ou au début d'une sous-expression entre parenthèses (après un `^`possible en tête). 
 +  * Finalement, les back références à un seul chiffre sont disponibles, et `\<et `\>sont des synonymes de `<nowiki>[[:<:]]</nowiki>et `<nowiki>[[:>:]]</nowiki>respectivement; aucun autre échappement ne sont disponibles 
 +===== Voir aussi ===== 
 +[[:tcl:regexp]], [[:tcl:regsub]] {{:faq:regexp.pdf|Documentation Regexp}} 
 +{{tag>F.A.Q.}} 
faq/re_syntax.1697014735.txt.gz · Dernière modification : 2023/10/11 08:58 de CrazyCat