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 :

Garder que le nom qui est à la fin de gethostbyaddr() si c'est un nom et non un ip [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre actif Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Points : 241
    Points
    241
    Par défaut Garder que le nom qui est à la fin de gethostbyaddr() si c'est un nom et non un ip
    Bonjour.

    Je cherche une façon de garder que la dernière occurrence d'une chaine de caractère comme ceci:
    "abc.net" et supprimer tout le reste si bien sur c'est abc.net et non 123.net ou 123.123 du résultat
    de gethostbyaddr($ip);

    Actuellement, dans ma base de données, j'ai des hosts complet tels que *.123.123.mc-abc.net.

    J'ai essayé un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_replace('/[^A-Za-z]/',''gethostbyaddr($ip))
    mais je me suis rendu compte que je ne voulais
    pas supprimer des caractères qui sont dans la fin du résultat.

    Quelqu'un a une idée?
    On oublie souvent la simplicité ou la base dans la vie: Maslow

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Excuse moi mais ça correspond à quoi ce truc ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre actif Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Points : 241
    Points
    241
    Par défaut
    C'est un exemple d'un ip renversé.
    On oublie souvent la simplicité ou la base dans la vie: Maslow

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Essaie cette expression :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [a-z0-9\-]{1,63}\.[a-z\.]{2,6}$
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre actif Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Points : 241
    Points
    241
    Par défaut
    Bonjour Sabotage,

    C'est presque ça: Cette expression va supprimer ce que je veux garder et laisser ce que je veux supprimer.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /[a-z0-9\-]{1,63}\.[a-z\.]{2,6}$)/
    Résultats:
    *.
    *.243.158.236
    *.123-177-173.ma.
    *.


    Ce que je dois garder, c'est ce qui n'est pas rayé (je mets pas en balise code):
    *.abc.net
    *.243.158.236
    *.123-177-173.ma.abc.com
    *.googlebot.com

    Inverser le résultat?

    J'allais oublié de dire que c'est le résultat avec preg_replace PHP
    On oublie souvent la simplicité ou la base dans la vie: Maslow

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    C'est preg_match qu'il faut utiliser
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre actif Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Points : 241
    Points
    241
    Par défaut
    Dans ma base de données, j'ai des trucs du genre (ex):

    *.123.123.domain.ltd

    Je dois utiliser domain.ltd et le placer dans un liste avec foreach sans *.123.123

    preg_match c'est pour tester si vrai ou faux; soit qu'on rejette ou qu'on accepte.
    preg_replace va plutôt rejeté la portion qui ne fait pas mon affaire et prendre le reste.

    Je regarde en ce moment même, les assertions avant et arrière.
    Je suis présentement ici pour tenter de comprendre et je teste avec

    J'ai passé la journée la dessus et je n'ai pas encore trouvé de solution.

    Citation Envoyé par sabotage Voir le message
    C'est preg_match qu'il faut utiliser
    On oublie souvent la simplicité ou la base dans la vie: Maslow

  8. #8
    Membre actif Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Points : 241
    Points
    241
    Par défaut
    J'ai fini par trouver mais si vous voyez un problème, faites-moi savoir.

    J'ai trouvé en y passant la nuit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /[\d\w](=?[a-z]{1,}\.[a-z]{1,}$)/
    avec preg_replace.

    Tout ce qui se trouve à l'avant de domaine.ltd si y a autre que des lettres, rejeté tout simplement.

    Je vois qu'un problème, si un caractère autre que des lettres se trouve dans domain (ex: doma3ine.ltd)
    ça va mettre comme domaine à garder ine.ltd. Ce n'est pas bon mais ... ce n'est pas parfait. Mais,
    si quelqu'un trouve une solution, j'apprécierais que mon regex soit complété. ça peut servir à d'autre.

    tester ICI
    On oublie souvent la simplicité ou la base dans la vie: Maslow

  9. #9
    Membre actif Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Points : 241
    Points
    241
    Par défaut Négatif, ça ne donne pas le domaine.ltd
    Mon message précédent, le code ne fonctionne pas.
    Ça donne toujours au final *.123.123-mc
    C'est plutôt domain.ltd qui est remplacé.
    Ce n'est pas ce que je souhaite.
    Non résolu.
    On oublie souvent la simplicité ou la base dans la vie: Maslow

  10. #10
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    avec un regex c'est très loin d'être évident.
    Comment tu gères ce cas : *.123-177-173.bbc.co.uk ?

    pour un cas sans regex (je ne sais pas si c'est une contrainte forte)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $s     = '*.123-177-173.ma.abc.com';
    $parts = array_reverse(explode('.', $s));
    if ((count($parts) >= 2) && ctype_alpha($parts[0]) && ctype_alnum($parts[1]))
        $to_keep =  $parts[1].'.'.$parts[0];

  11. #11
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    preg_match c'est pour tester si vrai ou faux; soit qu'on rejette ou qu'on accepte.
    non, ça capture.

    L'expression que j'ai donné gère les double TLD
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    preg_match('#[a-z0-9\-]{1,63}\.[a-z\.]{2,6}$#', '*.123-177-173.bbc.co.uk', $output);
    echo $output[0];
    // bbc.co.uk
    Bon évidemment les cas tordus ne fonctionneront pas, mais il faudra pour les gérer lister tous les TLD possibles.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  12. #12
    Membre actif Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Points : 241
    Points
    241
    Par défaut
    Bonjour rawsrc et sabotage.

    Merci pour les efforts que vous avez fait pour m'aider à résoudre ce problème. Je l'apprécie.

    Sabotage votre solution convient mieux à cause du Foreach (bdd) mais je dois ajouter
    une condition pour rejeter les résultats qui sont NULLs. Il me reste à compter le nombre maintenant.
    Pour l'affichage, je ne savais pas que je devais faire afficher avec ...[0].

    Pour les cas tordus ça prendrait GeoIP mais même encore là, ce n'est pas garantie. J'ai essayé
    un service de géolocalisation et parfois le résultat est faussé.

    Rawsrc, cette solution m'a aussi séduit, cependant, dans un foreach, ça n'a pas fonctionné.
    Mais, ça peut servir dans un autre cas pour moi.

    Passez une bonne journée!
    On oublie souvent la simplicité ou la base dans la vie: Maslow

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 26/08/2011, 06h25
  2. Réponses: 3
    Dernier message: 02/06/2010, 07h48
  3. Réponses: 5
    Dernier message: 12/03/2010, 11h03
  4. Ne garder que ce qui est entre deux plans
    Par rambc dans le forum OpenGL
    Réponses: 9
    Dernier message: 17/04/2009, 12h39
  5. [DOM] appeler une fonction via son nom (qui est une string)
    Par elekis dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 15/07/2008, 13h06

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