Suivez-nous sur X
|
|
|
0,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z,
ALL
|
|
0,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z
|
|
0,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z
|
|
A propos d'Obligement
|
|
David Brunet
|
|
|
|
En pratique : Correspondance de motif sur MorphOS
(Article écrit par Grzegorz Kraszewski et extrait de MorphOS Library - décembre 2009)
|
|
Note : traduction par David Brunet.
Introduction
La correspondance de motif compare une chaîne de caractères avec un motif. Le motif utilise une notation spécifique
pour désigner des critères de correspondance. Une forme très simple et bien connue de correspondance de motif
sont les caractères de remplacement (jokers) de MS-DOS "?" et "*". L'utilisation la plus courante de la correspondance de motif en informatique
est la correspondance des fichiers pour les commandes Shell. MorphOS utilise bien sûr la correspondance de motif dans
son Shell, mais celle-ci est également utilisée dans les requêtes de fichiers. De nombreuses applications utilisent
la correspondance de motif pour filtrer les informations affichées aux utilisateurs. Par exemple, Snoopium
et MediaLogger filtrent les noms des processus en fonction des motifs spécifiés par l'utilisateur.
MorphOS utilise sa propre notation de motif, héritée d'AmigaOS. Bien qu'elle ne soit pas aussi puissante que les
expressions régulières Unix, elle est plus facile à lire et à comprendre. D'autre part, la correspondance de motif
sur MorphOS est plus flexible que les caractères de remplacement. Voici un exemple :
delete "the #? - #?come#?.(mp3|aiff|wav)"
|
Cette commande supprimera tous les fichiers avec l'extension "mp3", "aiff" ou "wav", commençant par "the" et ayant
la chaîne "come" (en tant que mot ou partie du mot) n'importe où après un trait d'union entouré d'espaces.
Bien que cet exemple puisse sembler compliqué à première vue, il montre la puissance de la correspondance de motif
sur MorphOS. Et ceci vous semblera propre et compréhensible après la lecture de la suite de cet article.
Pour le moment, déclarons que tout le motif a été placé entre guillemets car il contient des espaces.
Notation
- "?" (point d'interrogation) - correspond à un et seulement un caractère. Par exemple "????" correspond à toutes les
chaînes de quatre caractères. "t??" correspond à toutes les chaînes de trois caractères commençant par "t".
- "#" (dièse) - c'est un opérateur de répétition. Il correspond à l'expression placée sur le côté droit, répétée
zéro ou plusieurs fois. Par exemple "#a" correspond à n'importe quel nombre de lettres "a", mais correspond aussi à
une chaîne vide. Pour correspondre à au moins un "a", le motif doit être noté "a#a". Un motif très commun "#?" correspond
à n'importe quelle chaîne, donc "delete #?" est un équivalent du "rm *" rencontré sous Unix.
- "()" (parenthèses) - est utilisé pour changer la priorité pour les autres opérateurs, comme en mathématiques.
Par exemple, un "a#?a" correspond à n'importe quelle chaîne commençant et se terminant par "a", mais un "a#(?a)"
correspond à n'importe quelle chaîne dans laquelle chaque caractère impair est "a", et chaque caractère pair est
n'importe quoi d'autre. D'autres exemples peuvent être trouvés ci-dessous dans la partie "Exemples" de cet
article.
- "|" (barre verticale) - signifie l'alternative. Par exemple, "(a|b)#?" correspond à toute chaîne commençant par "a"
ou "b". "#?(cat|dog)" correspond à n'importe quelle chaîne se terminant par "cat" ou "dog". Un exemple typique
est la correspondance d'un ensemble d'extensions de fichiers comme dans l'exemple d'introduction. Un exemple encore
plus simple est le suivant : "#?.(txt|doc|rtf)" correspond aux noms terminés par l'une des trois extensions
de document.
- "~" (tilde) - signifie la négation, peut être interprété comme "tout sauf" l'expression placée à droite. Par exemple
"~a#?" correspond à toutes les chaînes ne commençant pas par "a". De même, "~(foo)#?" correspond à toutes les chaînes
ne commençant pas par "foo". Notez l'utilisation des parenthèses, sans elles "~foo#?" correspondrait à toutes les
chaînes ne commençant pas par "f", mais ayant "o" en tant que deuxième et troisième caractère.
- "%" (signe de pourcentage) - rarement utilisé, correspond à une chaîne vide.
- "'" (guillemet simple) - c'est le caractère d'échappement. Le caractère spécial suivant après celui-ci est traité
comme un caractère ordinaire. Par exemple "#?'|#?" correspond à toutes les chaînes contenant une barre verticale.
"'##?" correspond à toutes les chaînes commençant par dièse. Notez bien que l'utilisation de caractère spéciaux
de correspondance de motif dans les noms de fichiers est fortement déconseillée et n'entraîne que des problèmes.
La possibilité d'échappement est cependant utile pour la correspondance générale de motif, sans rapport avec le
Shell et les fichiers.
- "[]" (crochets) - ils sont utilisés pour indiquer un ensemble ou une plage de caractères. Un ensemble est
spécifié simplement en écrivant tous ses caractères. Une plage est spécifiée avec un trait d'union. Par exemple,
"[AEIOUY]" signifie "tout caractère A, E, I, O, U et Y". "[A-F]" signifie "tout caractère A, B, C, D, E et F].
Un tilde utilisé entre crochets annule toute la classe, donc "[~EF]" signifie "tout caractère sauf E et F].
Exemples
"???#?" correspond à toutes les chaînes ayant au moins trois caractères.
"~(???#?)" correspond à toutes les chaînes ayant moins de trois caractères..
"#[0-9]" correspond uniquement aux nombres.
"[1-9]#[0-9]", comme ci-dessus, mais les nombres précédés de zéro ne sont pas autorisés.
"#([0-9]|[A-F]|[a-f])" correspond aux nombres hexadécimaux écrits avec des lettres minuscules ou majuscules.
"[0123][0-9](.|-)[01][0-9](.|-)[0-9][0-9][0-9][0-9]" correspond à la date au format européen (deux chiffres
pour le jour, deux chiffres pour le mois et quatre chiffres pour l'année), avec des points ou des tirets
utilisés comme séparateurs.
|