IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Regex match domain


Sujet :

Langage PHP

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2017
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2017
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Regex match domain
    Bonjour,
    J'essaye de développer une regex mais avec beaucoup de difficultés, j'avoue que j'ai un peu du mal avec les regex.
    Cependant j'ai besoin de vérifier un regex qui match sur les urls dont le nom du domaine comporte plus de 4lettre minuscule ET majuscule (ne pas tester après le slash).
    A savoir que l'url est écrite dans un champ texte dont il peut y avoir des caractères avant et après qui sont acceptés.

    ex:"testoto http://www.abcdeABCDE.com testoto" match
    "testoto http://www.abcdeABCDE.com/ testoto" match
    "testoto http://www.abcde.com/ABCDEF/ testoto" not match
    "testoto http://www.abcde.com/ testoto" not match

    "testtoto http://www.abcde.com test" not match

    "test http://www.Abcde.com test" not match

    Si quelqu'un pourrait m'aider pour la regex, ça serait vraiment sympa.

    Zoners

  2. #2
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    Ta question est mal posée.
    Tu écris "un regex qui match sur les urls dont le nom du domaine comporte plusde 4lettre minuscule ET majuscule" et tu donnes un exemple qui "matche" avec 4 lettres minuscules et MAJUSCULES.

    Esssaie ceci.
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    <?php
    function xtoto($url) {
     $site    = parse_url($url, PHP_URL_HOST);
     $domaine = array_reverse(explode('.',$site))[1];
     $pattern = "/[a-z]{4}[A-Z]{4}/";
     
     return preg_match($pattern, $domaine);
    }
     
    // en mode incompréhensible
    function toto($url) {
     return preg_match("/[a-z]{4}[A-Z]{4}/", array_reverse(explode('.',parse_url($url, PHP_URL_HOST)))[1]);
    }
     
    var_dump(toto('http://www.abcdeABCDE.com'));
    print "<br/>";
    var_dump(toto('http://www.abcde.com/ABCDEF/'));
    print "<br/>";
    var_dump(toto('http://www.abcde.com/'));
    print "<br/>";
    var_dump(toto('http://www.abcde.com'));
    print "<br/>";
    var_dump(toto('http://www.abcdeABCDE.com/abcedf'));
    print "<br/>";
    ?>
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  3. #3
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    L'idée de passer le relais à parse_url pour extraire le nom de domaine est bonne, par contre le explode et le array_reverse je ne suis pas fan. Bien que la partie "intéressante" se trouve avant le dernier point (avant le tld) dans les exemples donnés, le nom de domaine stricto sensu est www.abcdeABCDE.com pour le premier exemple. Il n'y a pas lieu de le saucissonner ou d'en extraire une partie particulière pour faire ce test.

    Quoiqu'il en soit, il n'en reste pas moins le problème de l'extraction de l'url du texte, ce qui n'est jamais simple. La syntaxe d'une url est très complexe et plutôt que de s'acharner à la décrire avec une regex (qui au final ne gérera de toute façon pas tous les cas de figure) autant partir sur le compromis d'une pattern naïve pour l'extraire (quitte à l'améliorer par la suite). Exemple pour un remplacement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $text = "testoto http://www.abcdeABCDE.com testoto";
     
    $result = preg_replace_callback('~\bhttps?://\S+~', function ($m) {
        if ( preg_match('~[a-z]{4}[A-Z]{4}~', parse_url($m[0], PHP_URL_HOST)) )
            return '<a href="' . $m[0] . '">' . $m[0] . '</a>';
        return $m[0];
    }, $text);
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

Discussions similaires

  1. Réponses: 5
    Dernier message: 19/03/2012, 20h45
  2. [Regex] match un header XML
    Par hannibal.76 dans le forum Débuter
    Réponses: 4
    Dernier message: 16/03/2012, 14h05
  3. Problème fonction Regex.Matches(,).Count
    Par maxwel56 dans le forum Silverlight
    Réponses: 4
    Dernier message: 21/06/2010, 14h49
  4. [Regex]Match d'une regexp avec une chaîne avec caractères spéciaux
    Par gdawirs dans le forum Collection et Stream
    Réponses: 13
    Dernier message: 25/11/2005, 12h24
  5. [Regex] Matching...
    Par billynirvana dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 18/07/2005, 17h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo