Accueil > Documentation >
Bonjour Invité
» IP: 38.103.63.60
Nom d'utilisateur
Mot de passe
Mot de passe perdu
Créer un compte

Nouveaux utilisateurs
The GMS seyni benefweb GUMPdotFR eytan007

Utilisateurs
1
01:  France Pierre Lannoy

Invités
1
01:  United states 38.103.x.x
visites 189 fois
Les expressions régulières, aussi appelées expressions rationnelles, permettent d'effectuer une recherche dans un texte (ici la page web analysée) en spécifiant un motif de recherche. Ce motif répond à une syntaxe particulière qu'il peut être intéressant de connaitre si vous désirez comprendre les règles par défaut de MailWalker ou si vous désirez créer vos propres règles.

Les expressions régulières peuvent paraître, au premier abord, complexes et illisibles, mais vous verrez qu'elles ne le sont pas tant que ça : après la lecture de ce chapitre et après avoir fait quelques essais, vous maitriserez suffisamment le sujet pour créer et utiliser des règles vraiment utiles à votre activité.

Vous pouvez néanmoins utiliser MailWalker sans vous souciez des expressions régulières qu'il gère : les règles contenues par défaut sont déjà parfaitement opérationnelles.



1 - Correspondance simple

A moins qu'il ne soit un méta-caractère (caractère spécial dont la sémantique diffère de son acceptation "habituelle), un caractère simple correspond à lui-même, en terme de comparaison.

Une série de caractères correspond donc à la même série de caractères dans la chaîne analysée. Ainsi le motif "bluh" correspond à "bluh" dans la chaîne analysée.

Vous pouvez obliger les méta-caractères ou les séquences d'échappement à être interprétés littéralement à l'aide d'un spécificateur : la barre oblique inverse "\". Par exemple : le méta-caractère "^" correspond normalement au début de ligne, mais "\^" correspond au caractère "^", "\\" correspond à "\" et ainsi de suite.

  Exemples :
    foobar correspondance avec la chaîne 'foobar'  
    \^FooBarPtr correspondance avec la chaîne '^FooBarPtr'  
 



2 - Séquences d'échappements

Les caractères peuvent être spécifiés avec une séquence d'échappement : "\n" correspond à une nouvelle ligne, "\t" à une tabulation, etc... Plus généralement, \xnn, où nn est un nombre hexadécimal, correspond au caractère ASCII de valeur nn. Si vous avez besoin de spécifier des caractères étendus (Unicode,...), vous pouvez utiliser "\x{nnnn}", où "nnnn" est une chaîne numérique hexadécimale.

  \xnn     Caractère hexa avec le code nn.
  \x{nnnn} Caractère hexa avec un code nnnn (un octet pour le texte ordinaire et 2 octets pour l'Unicode).
  \t       Tabulation horizontale (HT/TAB), même chose que \x09.
  \n       Nouvelle ligne (NL), même chose que \x0a.
  \r       Retour chariot (CR), même chose que \x0d.
  \f       Avance page (FF), même chose que \x0c.
  \a       Alarme (bell) (BEL), même chose que \x07.
  \e       Échappement (ESC), même chose que \x1b.

  Exemples :
    foo\x20bar correspondance avec 'foo bar' (notez l'espace au milieu).  
    \tfoobar correspondance avec 'foobar' précédé d'une tabulation.  




3 - Classes de caractères

Vous pouvez spécifier une classe de caractères en créant une liste de caractères entre crochets [], auquel cas la correspondance se fera en incluant tous les caractères présents dans la liste.

Si le premier caractère après "[" est "^", la comparaison s'effectuera de façon négative, auquel cas la correspondance se fera en incluant aucun des caractères présents dans la liste.

Exemples :
    foob[aeiou]r trouve les chaînes 'foobar', 'foober' etc... Mais pas 'foobbr', 'foobcr' etc...  
    foob[^aeiou]r trouve les chaînes 'foobbr', 'foobcr' etc. Mais pas 'foobar', 'foober' etc...  

Dans une liste, le caractère "-" est utilisé pour spécifier une plage, ainsi a-z représente tous les caractères entre "a" et "z" ("a" et "z" inclus).

Si vous voulez que "-" soit membre de la classe, mettez-le au début ou à la fin de la liste, ou alors placez un spécificateur d'échappement  ("\") devant.
Si vous voulez que "]" soit membre de la classe mettez-le au début de la liste, ou alors placez un spécificateur d'échappement  ("\") devant.

Exemples :
    [-az] correspondance avec 'a', 'z' et '-.'  
    [az-] correspondance avec 'a', 'z' et '-.'  
    [a\-z] correspondance avec 'a', 'z' and '-.'  
    [a-z] correspondance avec les 26 minuscules de 'a' à 'z'.  
    [\n-\x0D] trouve tous les #10,#11,#12,#13.  
    [\d-t] trouve n'importe quel caractère numérique, '-' ou 't'.  
    []-a] trouve n'importe quel caractère de ']' à 'a'.  




4 - Méta-caractères

Les méta-caractères sont des caractères spéciaux qui sont l'essence même des expressions régulières. Il en existe différents types :


4.1 - Méta-caractères - Séparateurs de ligne

 
    ^ Début de ligne.  
    $ Fin de ligne.
    \A Début de texte.  
    \Z Fin de texte.  
    . N'importe quel caractère dans une ligne.  

Exemples :
    ^foobar trouve la chaîne 'foobar' seulement si elle commence une ligne.  
    foobar$ trouve la chaîne 'foobar' seulement si elle finit une ligne.  
    ^foobar$ trouve la chaîne 'foobar' si une ligne ne contient que ce mot.  
    foob.r trouve les chaînes comme 'foobar', 'foobbr', 'foob1r' et ainsi de suite.  

Le méta-caractère "^" garantit, par défaut, de trouver l'élément seulement s'il est au début de la chaîne ou du texte, le méta-caractère "$" seulement s'il est à la fin. Les séparateurs de ligne inclus dans le texte ne sont pas considérés comme relevant par "^" ou "$" et la recherche n'aboutira pas (pas de correspondance) dans un tel cas.
Vous pouvez néanmoins considérer, et traiter comme telle, une chaîne de plusieurs lignes de texte - auquel cas "^" sera valable après le séparateur de ligne, et "$" sera valable avant un séparateur de ligne - en utilisant le modificateur m.
Les méta-caractères \A et \Z sont comme "^" et "$", excepté qu'ils ne fonctionnent qu'une seule fois pour tout le texte quand le modificateur m est en usage, tandis que "^" et "$" correspondront à chaque séparateur de ligne.

Le méta-caractère "." par défaut correspond à n'importe quel caractère, mais si vous mettez à off le modificateur s, les séparateurs de ligne ne seront plus inclus pour ".".

Le moteur d'expressions régulières de MailWalker fonctionne selon les recommandations unicode pour les séparateurs de lignes :

"^" est le début de la chaîne d'entrée, et si le modificateur m est à On, "^" correspondra à une chaîne suivant n'importe quelle occurrence de \x0D\x0A ou \x0A ou \x0D (en unicode, il en va de même pour \x2028 et \x2029 et \x0B et \x0C et \x85). Notez qu'il n'y a pas de ligne vide dans la séquence \x0D\x0A.

"$" est le début de la chaîne d'entrée, et si le modificateur m est à On, "$" correspondra à une chaîne précédant n'importe quelle occurrence de \x0D\x0A ou \x0A ou \x0D (en unicode, il en va de même pour \x2028 et \x2029 et \x0B et \x0C et \x85). Notez qu'il n'y a pas de ligne vide dans la séquence \x0D\x0A.

"." correspond à n'importe quel caractère, mais si le modificateur s est a Off, "." ne correspondra plus à \x0D\x0A et \x0A et \x0D (en unicode, il en va de même pour \x2028 et \x2029 et \x0B et \x0C et \x85).

Notez que "^.*$" (un motif de ligne vide) ne correspond pas à une chaîne vide, mais correspond à une chaîne contenant la séquence \x0A\x0D.


4.2 - Méta-caractères - Classes prédéfinies
 
    \w Un caractère alphanumérique (incluant "_").  
    \W Un caractère non alphanumérique.  
    \d Un caractère numérique.  
    \D Un caractère non numérique.  
    \s N'importe quel espace (même chose que [ \t\n\r\f]).  
    \S Tout ce qui n'est pas un espace.  

Vous pouvez utiliser "\w", "\d" et "\s" à l'intérieur d'une classe de caractères.

Exemples :
    foob\dr trouve les chaînes comme 'foob1r', 'foob6r', ... Mais pas 'foobar', 'foobbr' ...  
    foob[\w\s]r trouve les chaînes comme 'foobar', 'foob r', 'foobbr', ... Mais pas 'foob1r', 'foob=r', ...  


4.3 - Méta-caractères - Mots
 
    \b correspond à un mot.  
    \B correspond à tout, sauf à un mot.  

Un mot est une chaîne de caractères qui commence par un "\w" et fini par un "\W" ou inversement.


4.4 - Méta-caractères - Quantificateur

N'importe quel élément d'une expression régulière peut-être suivi par un quantificateur. En utilisant un quantificateur vous pouvez spécifier le nombre d'occurrence de l'élément, que cet élément soit un méta-caractère ou une sous expression.
 
    * Zéro ou plus ("vorace"), similaire à {0,}. 
    + Un ou plus ("vorace"), similaire à {1,}. 
    ? Zéro or un ("vorace"), similaire à {0,1}. 
    {n} Exactement n fois ("vorace").  
    {n,} Au moins n fois ("vorace").  
    {n,m} Au moins n fois mais pas plus de m fois ("vorace").  
    *? Zéro ou plus ("non-vorace"), similaire à {0,}?. 
    +? Un ou plus ("non-vorace"), similaire à {1,}?. 
    ?? Zéro ou un ("non-vorace"), similaire à {0,1}?. 
    {n}? Exactement n fois ("non-vorace").  
    {n,}? Au moins n fois ("non-vorace").  
    {n,m}? Au moins n fois mais pas plus de m fois ("non-vorace").  

Ainsi, les nombres entourés d'accolades sous la forme {n,m}, spécifient le minimum (lettre n) et le maximum (lettre m) d'occurrence de l'élément.
La forme {n} est équivalente à {n,n} et correspond à exactement à n fois.
La forme {n,} correspond à n ou plus.
Il n'y a aucune limite quand à la valeur de n et m, mais de grands nombres réclameront beaucoup plus de mémoire et ralentirons l'analyse.

Si les accolades apparaissent dans un autre contexte, elles sont traitées comme un caractère simple.

Exemples :
    foob.*r trouve les chaînes comme 'foobar', 'foobalkjdflkj9r' et 'foobr'.  
    foob.+r trouve les chaînes comme 'foobar', 'foobalkjdflkj9r' mais pas 'foobr'.  
    foob.?r trouve les chaînes comme 'foobar', 'foobbr' et 'foobr', mais pas 'foobalkj9r'.  
    fooba{2}r trouve les chaînes comme 'foobaar'.  
    fooba{2,}r trouve les chaînes comme 'foobaar', 'foobaaar', 'foobaaaar', etc...  
    fooba{2,3}r trouve les chaînes comme 'foobaar', ou 'foobaaar', mais pas 'foobaaaar'.  

Remarque au sujet des termes vorace et non-voracevorace permet de collecter, lors de la correspondance, autant que possible, alors que non-vorace permet de collecter, lors de la correspondance, aussi peu que possible. Par exemple, "b+" et "b*" appliqués à la chaîne "abbbbc" retournent "bbbb", "b+?" retourne "b", "b*?" retourne une chaîne vide, "b{2,3}?" retourne "bb", "b{2,3}" retourne "bbb".

Vous pouvez placer tous les quantificateurs en mode "non-vorace" en utilisant le modificateur g.


4.5 - Méta-caractères - Alternatives

Vous pouvez spécifier des alternatives au sein du motif en utilisant "|" pour les séparer, ainsi fee|fie|foe correspondra à "fee", "fie", ou "foe" dans la chaîne analysée (comme f(e|i|o)e le ferait).
La première forme d'alternative permet de tout inclure, depuis le délimiteur précédent ("(", "[", ou le début du motif) jusqu'au premier "|", alors que la deuxième forme d'alternative permet d'inclure du dernier "|" jusqu'au dernier délimiteur. Pour cette raison, il est une pratique courante d'inclure les alternatives dans des parenthèses, pour minimiser le risque de confusion.

Les alternatives sont évaluées de gauche à droite, et la première alternative trouvée pour la correspondance est celle qui est choisie. Ceci signifie que les alternatives ne sont pas nécessairement voraces. Par exemple, lorsque vous faites correspondre foo|foot à "barefoot", seule la partie "foo" sera utilisée, car elle est la première alternative essayée qui correspond exactement à la chaîne analysée (ceci devient très important lors de l'utilisation du parenthèsage).

Rappelez-vous aussi que "|" est interprété comme un littéral entre "[]", donc si vous écrivez [fee|fie|foe], vous rechercherez effectivement  [feio|].

Exemples :
  foo(bar|foo)  trouve les chaînes comme 'foobar' ou 'foofoo'.


4.6 - Méta-caractères - Sous expressions

Les parenthèses ( ... ) peuvent aussi être utilisées pour construire des sous expressions régulières.

Les sous expressions sont numérotées de gauche à droite selon les ouvertures des parenthèses. La première sous expression à le numéro 1, la deuxième le numéro 2,... L'expression régulière a, quant à elle, le numéro 0 - vous pouvez la substituer par '$0' ou '$&'.

Exemples:
    (foobar){8,10} trouve les chaînes qui contiennent 8, 9 ou 10 instances de 'foobar'.  
    foob([0-9]|a+)r trouve les chaînes comme 'foob0r', 'foob1r' , 'foobar', 'foobaar', 'foobaar', etc...  


4.7 - Méta-caractères - Références arrières

Les méta-caractères \1 jusqu'à \9 sont interprétés comme des références arrières. \<n> correspond à la sous expression #<n> précédemment trouvée.

Exemples :
 (.)\1+           trouve les chaînes comme 'aaaa' et 'cc'.
 (.+)\1+         trouve les chaînes comme 'abab' et '123123'.
 (['"]?)(\d+)\1   trouve "13" (entre guillemets), ou '4' (en apostrophe) ou 77 (sans guillemet ou apostrophe), etc...




5 - Modificateurs

Les modificateurs ont pour but de modifier le comportement du moteur d'expression régulières de MailWalker. 

 i
  Rend la correspondance insensible à la casse (utilisation des paramètres régionaux). Par défaut : Off.
m
  Traite les chaînes comme des ligne multiples. Modifie le comportement de "^" et "$" pour chercher uniquement à partir du début d'une ligne ou à la fin d'une ligne. Par défaut : Off.
s
  Traite les chaînes comme une simple ligne de texte. Change le comportement de "." pour qu'il corresponde à n'importe quel caractère, même un séparateur de ligne (voir aussi Séparateur de Ligne), normalement il ignorerait les sauts de ligne. Par défaut : Off.  
g
  Modificateur non standard. En le mettant à On vous passez tous les opérateurs en mode vorace. Si le modificateur g est à Off, alors '+' fonctionne comme '+?', '*' comme '*?' et ainsi de suite... Par défaut : Off.  
x
  Augmente la lisibilité du motif en vous permettant des espaces et des commentaires (voir l'explication plus bas). Par défaut : Off.
r
  Modificateur non standard. Si ajusté, les plages additionnelles de à-ÿ incluent les lettres russe '¸', À-ß incluent en plus '¨', et à-ß inclus tous les symboles russes. Par défaut : Off.    


Remarque concernant le modificateur x : ce modificateur demande à MailWalker d'ignorer les espaces qui ne sont pas précédés d'un spécificateur d'échappement ou qui ne sont pas dans une classe. Vous pouvez utiliser ceci pour dissocier l'expression régulière en morceaux plus petit et plus lisibles. Le caractère # est aussi traité comme un méta-caractère qui introduit les commentaires. Ceci signifie que si vous voulez insérer des espace ou des caractères # dans le motif (à l'extérieur de la classe, où ils ne sont pas affectés par  le modificateur x), vous devrez insérer des spécificateurs d'échappements ou les encoder avec des valeurs octales ou hexadécimales.

Pour utiliser un ou plusieurs de ces modificateurs, vous devez l'inclure dans l'expression régulière elle-même en utilisant la construction(?imsxr-imsxr). Si leur présence est encapsulée dans une sous expression, alors seule la sous expression sera affectée.

Exemples :
    (?i)Saint-Petersburg trouve 'Saint-petersburg' et 'Saint-Petersburg'.  
    (?i)Saint-(?-i)Petersburg trouve 'Saint-Petersburg' mais pas 'Saint-petersburg'.  
    (?i)(Saint-)?Petersburg trouve 'Saint-petersburg' et 'saint-petersburg'.  
    ((?i)Saint-)?Petersburg trouve 'saint-Petersburg', mais pas 'saint-petersburg' .  




6 - Commentaires

   (?#text)  met en commentaire le texte "text".  
Cette construction permet d'indiquer un commentaire, le texte est alors ignoré. Veuillez noter que MailWalker ferme le commentaire aussitôt qu'il voit une parenthèse ")", ainsi il n'y a aucune façon de placer une parenthèse dans le commentaire sans fermer celui-ci.

Ce chapitre s'inspire librement de la documentation officielle de la librairie TRegExpr
que Andrey V. Sorokin nous a gracieusement autorisé à publier ici.
 Tags
 Awards & Citations


 
Download Pipe (MailWalker)
Site proudly powered by MemHT Portal. MemHT Portal is a free software released under the GNU/GPL License by Miltenovik Manojlo
© WebSynaptics - All rigths reserved