wiki:fr:Documentation/Pattern matching

Version 1 (modified by AmigaPhil, 13 months ago) (diff)

--

Autres langues:

MOTIFS ET JOKERS AMIGADOS

L'utilisation des jokers dans un motifs vous permet d'effectuer des recherches très poussées. voici les caractères jokers utilisés :

? Correspond à un seul caractère (quel qu'il soit)

ainsi Y?M correspond à YAM, YUM, Y@M etc.

# Correspond de zéro à plus de l'occurrences du caractère qui le suit

ainsi Y#AM correspond à YM, YAM, YAAM, YAAAM etc.

#? Correspond à tout (rien y compris !)

ainsi #?YAM#? correspond à toutes les chaînes avec « YAM » dedans.

% Correspond à une chaîne vide. Pas vraiment utile par lui même, mais vous pourrez l'utiliser pour trouver les messages sans sujet.

() Les parenthèses sont utiliser pour grouper des caractères et des expressions ainsi que pour donner un ordre dans l'évaluation de l'expression.

Ainsi #(Re:)YAM correspond à YAM, Re:YAM, Re:Re:YAM ...

[] Les crochets sont utilisés pour indiquer une liste de caractères possible,

ainsi [YAM] correspond à n'importe laquelle de ces lettres Y, A or M mais pas YAM.

- Indique une « fourchette », ainsi [0-9] correspond à n'importe quel chiffre et #[0-9] correspond à n'importe quel nombre.

~ Signifie PAS, fait référence à l'expression qui le suit,

ainsi ~Re: correspond à toute chaîne qui ne commence pas par « Re: ».

| Signifie OU, fait référence aux expressions de part et d'autre.

Vous devez mettre l'expression entière entre parenthèses : ex. (#?YAM#?|#?MUI#?) se rapporte aux chaînes qui contiennent soit « YAM » soit « MUI ».

ATTENTION ! Ce n'est pas si simple que ça en a l'air ! Par exemple, essayez de construire un filtre qui trouverait YAM et YAM2 mais qui ignorerait YAM1. Essayez celui-ci : #?YAM(~1)

Qu'est-ce que ça veut dire ?
Lire la nouvelle chaîne à partir de la gauche, et chercher la séquence YAM. Si elle est trouvée, recherche la partie qui suit : est-ce égale à « 1 » ? Si non, vous avez la correspondance. l'ennuie est que « 1.3.5 » n'est pas égale à « 1 » (c'est trop long) donc YAM1.3.5 sera inclus alors que vous ne le souhaitiez pas. La solution est de faire que la partie qui suit « YAM » ne commence pas par « 1 », donc essayons ceci : #?YAM(~1#?)

On se débarrasse bien de « 1.3.5 », mais il reste un problème. Des fois les gens insèrent un espace entre YAM et son numéro de version. Donc les références « YAM 1 » sont toujours prise en compte. Vous devez alors préciser qu'il peut y avoir un nombre quelconque d'espaces entre le nom et le numéro de version comme ceci : #?YAM# (~1#?)

Autre cas - Supposons que nous voulons trouver toutes les chaînes qui contiennent YAM, mais qui ne commence pas par « Re: ». Essayons (~Re:)YAM#?

Ceci commence par comparer le début de la chaîne avec « Re: ». Si nous obtenons une correspondance, cette chaîne est annulée. Si non, on recherche dans le reste de la chaîne « YAM ». Que ce passe t-il si la chaîne commence par « YAM » ? La lettre n'est pas « R » donc la condition n'est pas satisfaite. Mais nous venons de tester la lettre Y, donc YAM ne sera pas trouvé ! Pour mettre tout ça au clair, il nous faut indiquer que la partie à gauche de YAM peut-être une chaîne vide (ce pourquoi elle est faite !), comme ceci : (~Re:|%)YAM#?

Question pour les pros de l'ordinateur : à quoi correspond ~((~#?YAM#?)|(~#?MUI#?)) ? :-)