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 :

[Script]Extraire une url [Tutoriel] [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre actif

    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    310
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 310
    Points : 208
    Points
    208
    Par défaut [Script]Extraire une url
    Bonjour
    J'ai un fichier contenant un tas de lignes avec diverses informations et dans une de ces lignes, il y a l'url d'un site.

    ça donne ça en gros :
    texte texte texte texte
    texte texte texte texte
    texte texte texte texte texte texte http://www.monsite.com/index.php?sid=blabla&topic=45 texte texte texte
    texte texte
    Comment extraire l'url de ce fichier?
    J'ai essayé en faisant ça :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
    ereg&#40;"http&#40;.*&#41;\s",$ligne,$tableau&#41;;
    ?>

    afin que ça s'arrête au premier espace trouvé (\s) mais lorsque j'affiche $tableau[1], il s'arrête au premier s trouvé

    Voici mon code complet :

    Code : 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
    <?php
    $trouve = false;
    $pointeur = fopen&#40;'essai.txt','r'&#41;;
     
    //recherche de la ligne contenant l'url
    while&#40;&#40;$trouve == false&#41; && &#40;$ligne = fgets&#40;$pointeur&#41;&#41;&#41;
    &#123;
        if &#40;strstr&#40;$ligne,'http&#58;//'&#41;&#41;
        &#123;
            $trouve = true;
        &#125;
    &#125;
    ereg&#40;"http&#40;.*&#41;\s",$ligne,$tableau&#41;;
    print_r&#40;$tableau&#41;;
     
    //affiche Array &#40; &#91;0&#93; => http&#58;//www.monsite.com/index.php?s &#91;1&#93; => &#58;//www.monsite.com/index.php? &#41;
    ?>
    Merci d'avance pour votre aide

  2. #2
    Membre actif

    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    310
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 310
    Points : 208
    Points
    208
    Par défaut
    Salut
    je connais bien cette fonction mais je pensais qu'un regex pouvait faire ça, ça évite de faire une boucle
    si ce n'est pas possible, je l'utiliserai
    merci en tout cas

  3. #3
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Effectivement! J'ai effacé mon message car l'utilisation d'une boucle avec strpos() n'est pas la meilleure solution je suppose... En plus tu devras trouver l'espace de la fin de l'url pour délimiter cette-dernière... Donc ça fait un strpos() sur "http://" plus un autre pour l'espace de fin... Essaye de trouver une solution plus simple si possible. Bon courage, à+
    De retour parmis vous après 10 ans!!

  4. #4
    Membre actif

    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    310
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 310
    Points : 208
    Points
    208
    Par défaut
    merci
    c'est justement cet espace que je n'arrive pas à mettre, pourtant \s signifie bien espace mais ça ne fonctionne pas; je vais continuer à faire des essais

  5. #5
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Le caractère #0 peut-être présent dans un fichier, mais invisible à l'affichage.
    Il peut fausser la recherche dans certains cas.
    Quoiqu'il en soit, l'espace = chr(32). Peut-être peux-tu l'utiliser dans ton code...
    De retour parmis vous après 10 ans!!

  6. #6
    Membre actif

    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    310
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 310
    Points : 208
    Points
    208
    Par défaut
    Ca y est presque
    grace à toi ça affiche :
    "://www.monsite.com/index.php?sid=blabla&topic=45 texte texte", bizarre qu'il se soit pas arrêté au premier espace

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Points : 1 206
    Points
    1 206
    Par défaut
    La bibliothèque des expressions régulières pcre est recommandée pour sa rapidité et la possibilité d'utiliser des options.

    Je ferais ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    preg_match&#40;'/http&#91;^\s&#93;*/i',$txt,$sortie&#41;;
    echo $sortie&#91;0&#93;;
    / est un délimiteur de motif (tu peux mettre ce que tu veux |&`ù%....)
    [^\s] est une classe de négation de caractères (tout caractère sauf l'espace \s)
    * 0 ou plus
    i est une l'option "insensible à la casse" (au cas où tu aurais HTTP://...)

    Pour ton expression, il me semble que \s ne soit pas supporté par les regex posix. Il prendra donc le caractère s (échappé par \). Si tu tiens vraiment aux regex posix essaye [^[:space:]] pour remplacer [^\s]
    :q :q! :wq :w :w! :wq! :quit :quit! :help help helpquit quit quithelp
    :quitplease :quitnow :leave :shit ^X^C ^C ^D ^Z ^Q QUITDAMMIT
    Jabber: ripat at im.apinc.org

  8. #8
    Membre expert

    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    1 581
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 581
    Points : 3 016
    Points
    3 016
    Par défaut
    Citation Envoyé par ripat
    La bibliothèque des expressions régulières pcre est recommandée pour sa rapidité et la possibilité d'utiliser des options.
    ça je ne suis pas tout à fait d'accord. Les regex ont la réputation d'être lentes et il vaut mieux utiliser les fonctions de chaînes de caractères classique quand c'est possible.

    Citation Envoyé par ripat
    Je ferais ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    preg_match&#40;'/http&#91;^\s&#93;*/i',$txt,$sortie&#41;;
    echo $sortie&#91;0&#93;;
    Bon début, mais j'aurais plutôt utilisé preg_match_all

    pour rechercher toutes les occurrences d'URL trouvées dans la chaîne.

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Points : 1 206
    Points
    1 206
    Par défaut
    Citation Envoyé par stephaneey
    ça je ne suis pas tout à fait d'accord. Les regex ont la réputation d'être lentes et il vaut mieux utiliser les fonctions de chaînes de caractères classique quand c'est possible.
    Je parlais des PCRE comparées aux POSIX...
    Ceci dit, tu as raison, les traitements de chaîne sont plus rapides, mais bonjour la galère pour tenir compte de la casse, des césures et autres alternations....

    Tu peux en effet t'en tirer avec des strpos ou stripos (php5) mais quid si il y a dans le texte d'autres mots avec 'http' comme
    "Le protocole http etc...lien http://www.monsite.com/index.php?sid=blabla&topic=45 texte....."
    Les regex sont peut-être plus lentes mais quelle facilité quand on est paresseux comme moi

    Citation Envoyé par stephaneey
    Bon début, mais j'aurais plutôt utilisé preg_match_all
    pour rechercher toutes les occurrences d'URL trouvées dans la chaîne.
    T'as encore raison mais dans la question il y a :
    dans une de ces lignes, il y a l'url d'un site.
    :q :q! :wq :w :w! :wq! :quit :quit! :help help helpquit quit quithelp
    :quitplease :quitnow :leave :shit ^X^C ^C ^D ^Z ^Q QUITDAMMIT
    Jabber: ripat at im.apinc.org

  10. #10
    Membre actif

    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    310
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 310
    Points : 208
    Points
    208
    Par défaut
    Je vous remercie, c'est très sympa de m'avoir aidé !
    Ca fonctionne parfaitement maintenant, c'est bien plus simple qu'avec strpos/substr/strlen

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php
     
    //texte
    $ligne = 'fdfsdjkfdjskljfldks http&#58;//www.google.fr fodfkljskljsdf';
     
    //s'arrete au premier espace trouvé &#40; \s &#41;
    preg_match&#40;'/http&#91;^\s&#93;*/',$ligne,$tableau&#41;;
     
    //affichage
    echo $tableau&#91;0&#93;
     
    ?>

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

Discussions similaires

  1. [RegEx] extraire une url dans une chaine
    Par misakilou dans le forum Langage
    Réponses: 6
    Dernier message: 15/02/2012, 20h08
  2. Extraire une URL d'un site en Javascript
    Par Toximix dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 09/01/2011, 17h05
  3. [RegEx] Extraire une url d'une chaine
    Par About dans le forum Langage
    Réponses: 1
    Dernier message: 16/04/2008, 22h23
  4. [RegEx] Extraire une URL en excluant certaines extensions
    Par marciv dans le forum Langage
    Réponses: 2
    Dernier message: 13/04/2007, 05h33
  5. Scripts : Extraire une ligne
    Par nemohck dans le forum Linux
    Réponses: 7
    Dernier message: 03/11/2003, 21h40

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