Please note, this is a STATIC archive of website developer.mozilla.org from November 2016, cach3.com does not collect or store any user information, there is no "phishing" involved.

Création d'expression régulières pour les générateurs de microrésumés

Attention: la compatibilité avec Microsummary a été retirée dans Gecko 6.0 (Firefox 6.0 / Thunderbird 6.0 / SeaMonkey 2.3)

Introduction

Une expression régulière est un type particulier de chaîne (une séquence de caractères) qui coïncide avec la disposition des caractères dans certaines autres chaînes. Les générateurs de microrésumés les emploient pour déterminer les pages sur lesquelles ils savent travailler en comparant l'expression régulière aux URL des pages.

Ce tutoriel propose de créer des expressions régulières correspondant aux URL des pages d'enchères eBay. Les bases de la création d'expressions régulières destinées à sélectionner des URL devraient vous être familières d'ici la fin de cet article.

Si vous recherchez une documentation complète sur les expressions régulières, consultez Référence de JavaScript 1.5 Core:Objets globaux:RegExp. Si vous désirez apprendre à créer un générateur de microrésumé, consultez Création d'un générateur de microrésumé.

URL eBay

Comme celles de nombreux sites, les URL des pages d'enchères sur eBay se composent en général de la chaîne "https://", d'un nom de domaine, d'un chemin d'accès à un fichier et de paramètres de requête. Un exemple d'une URL de ventes aux enchères d'un article :

 https://cgi.ebay.com/ws/eBayISAPI.dll?ViewItem&item=280018439106

Dans cette URL, on peut noter le nom de domaine, "cgi.ebay.com", le chemin d'accès au fichier, "/ws/eBayISAPI.dll", et les paramètres définissant la requête, "?ViewItem&item=280018439106".

Cibler une URL eBay

Pour cibler cette URL avec une expression régulière, nous avons besoin d'utiliser dans celle-ci des caractères qui coïncident avec les caractères de l'URL. La plupart du temps, nous pouvons cibler un caractère de l'URL en utilisant le même caractère dans l'expression régulière. Par exemple, l'expression régulière suivante coïncide, et est identique, avec le début de l'URL :

 https://

Mais certains caractères sont spéciaux dans les expressions régulières. Par exemple, un point <tt>.</tt> coïncide avec tous les caractères, et un point suivi d'un astérisque <tt>.*</tt> coïncide avec n'importe quelle combinaison de caractères. Quand de tels caractères apparaissent dans une URL, et que nous voulons les cibler dans une expression régulière, nous devons les échapper dans l'expression en les préfixant avec un antislash <tt>\</tt>.

Voici une expression régulière qui cible notre URL d'exemple :

 https://cgi\.ebay\.com/ws/eBayISAPI\.dll\?ViewItem&item=280018439106

Cela ressemble presque à l'identique à l'URL. La seule différence est que l'expression régulière utilise des antislash avant le point et le point d'interrogation, ces deux caractères ayant une signification particulière dans les expressions régulières.

Cibler depuis le début de l'URL

Comme cette expression coïncide avec l'URL, elle correspondrait aussi avec d'autres URL contenues dans les paramètres de requête, comme celle-ci :

https://www.example.com/redirect.php?url=https://cgi.ebay.com/ws/eBayISAPI.dll?ViewItem&item=280018439106

Ce n'est probablement pas ce que vous recherchez, malgré les URLs contenues cet exemple n'est vraisemblablement pas une page d'enchères en tant que telle. Afin de limiter notre expression régulière à l'URL commençant notre URL d'exemple, nous la préfixerons avec un caractère d'omission <tt>^</tt> :

 ^https://cgi\.ebay\.com/ws/eBayISAPI\.dll\?ViewItem&item=280018439106

Quand un caractère d'omission est le premier caractère d'une expression régulière, cela signifie que l'expression doit être trouvée au début de la correspondance. Maintenant que notre expression régulière est préfixée avec un caractère d'omission, la correspondance sera seulement faite sur l'URL à droite du début, comme notre URL d'exemple.

Cibler plusieurs URLs

Mais cette expression correspond seulement à l'URL d'une page d'enchères d'un seul article. Cela ne fonctionne pas avec tout autre article aux enchères. Pour ce faire, nous devons enlever la partie spécifique à un article particulier dans l'URL, et laisser seulement les parties communes à tous les articles.

Pour identifier les parties spécifiques et communes, regardons les URLs de plusieurs autres pages d'enchères :

 https://cgi.ebay.com/ws/eBayISAPI.dll?ViewItem&item=130017517168
 https://cgi.ebay.com/ws/eBayISAPI.dll?ViewItem&item=290019763032
 https://cgi.ebay.com/ws/eBayISAPI.dll?ViewItem&item=170019463424

En se basant sur ces exemples, il apparaît que la partie spécifique est le numéro d'article à la fin de l'URL, le reste étant commun à toutes les URLs. Aussi, enlevons le numéro d'article pour garder l'expression régulière suivante :

 ^https://cgi\.ebay\.com/ws/eBayISAPI\.dll\?ViewItem&item=

Prévoir les variations dans les paramètres de requête

Nous avons maintenant une expression régulière qui cible nos quatre exemples. Elle correspondra aussi probablement à d'autres pages d'enchères. Mais pour la rendre plus robuste, nous devrions prévoir la possibilité de variations dans les paramètres de requête.

Un paramètre nommé est une chaîne sous la forme <name>=<value>, ou <name> et <value> sont des chaînes arbitraires. Dans notre URL, "item=280018439106" est le seul paramètre de ce genre. Mais des URLs peuvent contenir de multiples paramètres nommés séparés par des esperluettes <tt>&</tt>, et les paramètres peuvent apparaître dans n'importe quel ordre. Aussi quoique que le paramètre "item" semble nécessaire, il pourrait ne pas apparaître immédiatement à droite de "ViewItem".

Par exemple, l'URL suivante est également valide pour le même article d'enchères :

 https://cgi.ebay.com/ws/eBayISAPI.dll?ViewItem&foo=bar&item=170019463424

Pour s'accommoder de ces variations dans les paramètres de requête, nous pouvons insérer un point suivi d'un astérisque <tt>.*</tt> entre "ViewItem&" et "item=" pour cibler toute combinaison de caractères qui pourraient apparaître entre ces deux chaînes :

 ^https://cgi\.ebay\.com/ws/eBayISAPI\.dll\?ViewItem&.*item=

Le point suivi d'un astérisque correspond à n'importe quelle combinaison de caractères, y compris s'il n'y a pas de caractères. Aussi cela fonctionne si "ViewItem&" et "item=" sont immédiatement à droite l'un de l'autre (comme dans notre URL d'exemple) aussi bien que s'il y avait quelques caractères entre eux.

Cibler une autre URL eBay

Nous avons maintenant une expression régulière qui cible des URLs d'enchères, incluant celles avec plusieurs paramètres de requête, dans n'importe quel ordre. Mais eBay utilise un style d'URL différent dans certains cas (par exemple dans une page de résultats d'une recherche). Voici une URL pour le même article dans un style différent :

 https://cgi.ebay.com/Mozilla-Firefox-logo-1-inch-pin-badge-button-browser_W0QQitemZ280018439106QQihZ018QQcategoryZ2036QQcmdZViewItem

Pour se conformer à ces URLs, nous pouvons créer une deuxième expression régulière qui leur correspondront. Comme nous l'avons vu, nous devons distinguer les composants de l'URL qui sont spécifiques de ceux communs à toutes les URLs d'enchères de ce style.

Plusieurs autres URLs de ce style :

 https://cgi.ebay.com/Firefox-2002-DVD_W0QQitemZ130017517168QQihZ003QQcategoryZ617QQcmdZViewItem
 https://cgi.ebay.com/AHM-HO-SCALE-FIREFOX-TANK-CAR_W0QQitemZ290019763032QQihZ019QQcategoryZ19130QQcmdZViewItem
 https://cgi.ebay.com/Inuyasha-anime-pin-of-Kirara-Kilala-firefox_W0QQitemZ170019463424QQihZ007QQcategoryZ39557QQcmdZViewItem

En se basant sur ces exemples, il apparaît que toutes les URLs commencent avec "https://cgi.ebay.com/", qu'elles contiennent la chaîne "QQitemZ" suivie par le numéro d'article et qu'elles se terminent avec la chaîne "QQcmdZViewItem". Nous pouvons donc construire l'expression régulière suivante pour obtenir cette correspondance :

 ^https://cgi\.ebay\.com/.*QQitemZ.*QQcmdZViewItem

Dans cette expression, nous utilisons <tt>.*</tt> deux fois, car il y a deux endroits où des caractères changent entre plusieurs URLs d'enchères.

Manipuler des URLs HTTPS

Note: bien que eBay ne le fasse pas, un site peut parfois rendre des pages disponibles avec deux URLs, sécurisée ou non. Par exemple, les deux URLs suivantes pourraient pointer sur la même page :

 https://www.example.com/index.html
 https://www.example.com/index.html

Pour faire une expression régulière qui cible ces deux pages, nous avons juste besoin de commencer l'expression avec "https" et d'ajouter un point d'interrogation <tt>?</tt> après cette chaîne, par exemple :

 ^https?://www\.example\.com/index\.html

Le point d'interrogation rend le caractère qui le précède optionnel, ainsi l'expression régulière correspond aussi bien aux chaînes contenant un "s" dans "https" qu'à celles qui n'en contiennent pas.

Conclusion

Si nous incluons ces deux expressions régulières dans un générateur de microrésumé pour les pages d'enchère eBay, le générateur les utilisera pour toutes les pages concernant des articles aux enchères (au moins toutes les pages que nous avons étudiées jusqu'à présent).

Notez que comme les générateurs de microrésumé sont en langage XML, nous devons échapper les caractères spéciaux inférieur <tt><</tt>, supérieur <tt>></tt> et esperluette <tt>&</tt> en les remplaçant par leur entité équivalente (respectivement <tt>&lt;, &gt;,</tt> et <tt>&amp;</tt>) dans les expressions régulières, quand nous les plaçons dans un générateur.

Pour les expressions régulières que nous avons créées dans ce tutoriel, le seul caractère spécial que nous devons échapper est l'esperluette. Voici à quoi pourrait ressembler l'élément <pages> dans un générateur de microrésumé pour les pages d'enchères eBay :

 <pages>
   <include>^https://cgi\.ebay\.com/.*QQitemZ.*QQcmdZViewItem</include>
   <include>^https://cgi\.ebay\.com/ws/eBayISAPI\.dll\?ViewItem&amp;.*item=</include>
 </pages>

Pour voir ces expressions régulières en action, installez le générateur de microrésumé pour les pages d'enchères eBay disponible dans cette page d'exemples de générateurs.


Interwiki Languages Links

Étiquettes et contributeurs liés au document

Étiquettes : 
 Contributeurs à cette page : FredB, Elethiomel, Kyodev, Fredchat, Mgjbot, Planche
 Dernière mise à jour par : FredB,