Premier article: comment matcher un nom de domaine avec une expression régulière sur une adresse web, ou bien comment vérifier qu’une adresse web est bien celle d’un nom de domaine spécifié.

Alors voici l’expression régulière que je propose:

^https?://([^/]*\.)?\Qcyril.me\E(:\d+)?(\z|/)

Expications:

  • ^ : permet de signifier que l’on commence au début de la chaine de caractères (on ne veut pas matcher une adresse du type (http://redir.org/?url=http://cyril.me/)
  • https? : on ne match que les protocoles web, soit http ou https
  • ([^/]*\.)?\Qcyril.me\E : match toutes les possibilités de a.b.c.cyril.me, ou cyril.me tout court. L’important est qu’il n’y ai pas de ‘/’ avant le cyril.me. Attention: le but n’est pas de vérifier la conformité d’une adresse web ou du nom de domaine, car on part du principe que l’adresse est valide. Le \Q permet de rechercher ce qui suit sans en interpréter la signification (en l’occurrence, ça permet de ne pas interpréter le ‘.’ comme « n’importe quel caractère »). Le \E repasse en mode d’interprétation.
  • (:\d+)? : parfois, on est sur un port différent que le port standard, par exemple cyril.me:81 ou ou même sur le port normal cyril.me:80
  • (/|\z) : Soit tout ce qui précède est suivi par un ‘/’, puis suivent n’importent quels caractères qui ne nous intéressent pas, ou bien on match la fin de la chaine par \z.

Voici un petit code qui permet de tester cette expression régulière sur plusieurs adresses (cf aussi une page web pour faire des tests):

  1. #!/usr/bin/perl
  2.  
  3. # Differentes regexps
  4. @url = ("http://cyril.me:80/abc", "http://cyril.me/abc", "https://www.cyril.me/abc", "http://cyril.me", "https://wwwcyril.me/abc", "http://www.cyril.mercredi/");
  5. # l'expression reguliere (attention aux echappements)
  6. $r = "^https?://([^/]+\\.)?cyril.me(:\\d+)?(/|\\z)";
  7.  
  8. $u (@url) {
  9.   ($u =~ /$r/i) {
  10.     "$u matches\n";
  11.   }
  12.   {
  13.     "$u not matches\n";
  14.   }
  15. }

One Comment

  1. Benton Gilreath says:

    Un grand bravo pour vos articles et pour le temps que vous y consacrez. Cela fait plaisir à lire. Amicalement

Leave a Reply