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 :

Recuperer le nom d'un fichier dans du code html [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Inscrit en
    Novembre 2006
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 11
    Par défaut Recuperer le nom d'un fichier dans du code html
    Bonjour, j'essaie de parser un flux rss avec des expressions régulières et je bloque sur une de mes regex...

    voici ma chaine d'entrée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <img align="right" width="120" height="90" src="http://ak.static.dailymotion.com/dyn/preview/160x120/1535778.jpg?20090107072038" style="border: 2px solid #B9D3FE;">
    et j'aimerais ressortir le nom de l'image sans l'extension a savoir : 1535778 (sachant que le nom peut parfois contenir des lettres et même des tirets)

    Comme le point est un char spécial dans les regex, je bute un petit peu...

    Je vous remercie d'avance pour votre aide

    ciao et merci

  2. #2
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    Salut,

    Le point est un meta-caractère qui s'échappe avec un anti-slash. Sauf dans une classe de caractère, où il n'est pas un caractère spécial.

    Bref :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <?php
    // pattern
    $pattern = '#<img [^>]* src="http://.*/([^.]+)\.[^"]*"[^>]*>#';
     
    //test
    print "<pre>";
     
    $myString = '<img align="right" width="120" height="90" src="http://ak.static.dailymotion.com/dyn/preview/160x120/1535778.jpg?20090107072038" style="border: 2px solid #B9D3FE;">';
    preg_match($pattern, $myString, $matches);
        var_dump($matches);
    print "\n\n";

  3. #3
    Membre habitué
    Inscrit en
    Novembre 2006
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 11
    Par défaut
    Haaaaa ! merci ca marche nikel mais j'ai encore un petit problème...
    Le truc c'est que mon paramètre d'entrée n'est pas vraiment celui que j'ai écrit, il est plus long (je pensais que de mettre l'essentiel suffirai)

    et donc avec mon véritable paramètre d'entrée (directement extrait d'un rss de dailymotion):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <![CDATA[<a href="http://www.dailymotion.com/humour-beaufCom/video/x7y304_un-chien-gogole_animals?from=rss"><img align="right" width="120" height="90" src="http://ak.static.dailymotion.com/dyn/preview/160x120/13347508.jpg?20090107072038" style="border: 2px solid #B9D3FE;"></a><p>Plus de video gratuit sur http://www.humour-beauf.com  Ce chien fait n'importe quoi</p><p>Auteur : <a href="http://www.dailymotion.com/humour-beaufCom?from=rss"><img src="http://style.dailymotion.com/images/avatar/male/80x80.jpg" width="80" height="80" alt="avatar"/>humour-beaufCom</a><br />Tags : <a href="http://www.dailymotion.com/tag/chien">chien</a> <a href="http://www.dailymotion.com/tag/stupide">stupide</a> <a href="http://www.dailymotion.com/tag/animal">animal</a> <a href="http://www.dailymotion.com/tag/animaux">animaux</a> <br />Envoyé : 06 janvier 2009<br />Note :5.0<br />Votes :1<br /></p>]]>
    ca ne marche pas... Ce serai vraiment cool si quelqu'un pouvait me modifier la regex ci dessus en prenant en compte le "bordel" situé avant et après ladite balise image.

    A ce que j'ai compris, ca doit se résoudre avec des * mais mes 2/3 essais ont été infructueux.

    Merci d'avance les amis !

  4. #4
    Membre chevronné Avatar de goodpz
    Profil pro
    Inscrit en
    Février 2007
    Messages
    475
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 475
    Par défaut
    Le pattern initial était greedy donc il devait prendre des élément plus loin dans la chaine.

    Essai ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $pattern = '#<img [^>]* src="http://.*?/([^./]+)\.#';
    Si le host du img src est toujours "ak.static.dailymotion.com/dyn/preview" alors il vaudrait mieux le préciser dans le pattern car ce dernier ne va fonctionner que si ton img est le premier dans la chaine.

  5. #5
    Membre habitué
    Inscrit en
    Novembre 2006
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 11
    Par défaut
    Heuu j'ai testé et ca ne marche pas non plus : /

    Avant je récupérai l'adresse entière de l'image avec cette regex :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #height=\"90\" src=\"(.*)\?[0-9]+#
    Ca marche nikel mais ce n'est plus ce dont j'ai besoin (enfin si ca peut vous aidez...)

    Si c'est plus chaud que ca en a l'air de recuperer le nom de l'image je vais faire ca autrement. Mais l'ideal pour moi serai qu'un dieu de la regex me trouve la bonne expression régulière ^^

    Enfin jml94 et goodpz je vous remercie d'autant plus que vous devez être très proche de la solution.

    Une autre proposition ?

    Merci merci

  6. #6
    Membre chevronné Avatar de goodpz
    Profil pro
    Inscrit en
    Février 2007
    Messages
    475
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 475
    Par défaut
    Mon pattern fonctionne si je l'applique à ta chaîne avec le <![CDATA[]]>.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $pattern = '#<img [^>]* src="http://.*?/([^./]+)\.#';
     
    $myString =<<<EOF
    <![CDATA[<a href="http://www.dailymotion.com/humour-beaufCom/video/x7y304_un-chien-gogole_animals?from=rss"><img align="right" width="120" height="90" src="http://ak.static.dailymotion.com/dyn/preview/160x120/13347508.jpg?20090107072038" style="border: 2px solid #B9D3FE;"></a><p>Plus de video gratuit sur http://www.humour-beauf.com  Ce chien fait n'importe quoi</p><p>Auteur : <a href="http://www.dailymotion.com/humour-beaufCom?from=rss"><img src="http://style.dailymotion.com/images/avatar/male/80x80.jpg" width="80" height="80" alt="avatar"/>humour-beaufCom</a><br />Tags : <a href="http://www.dailymotion.com/tag/chien">chien</a> <a href="http://www.dailymotion.com/tag/stupide">stupide</a> <a href="http://www.dailymotion.com/tag/animal">animal</a> <a href="http://www.dailymotion.com/tag/animaux">animaux</a> <br />Envoyé : 06 janvier 2009<br />Note :5.0<br />Votes :1<br /></p>]]>
    EOF;
     
    preg_match($pattern, $myString, $matches);
    echo $matches[1];
    Là où ca peut se compliquer un peu, c'est s'il y a plusieurs <img src=""> dans la chaîne. Dans ce cas, il vaut mieux je pense préciser une partie du host (http://ak.static.dailymotion.com/dyn/preview) dans le pattern pour affiner le match.

  7. #7
    Membre habitué
    Inscrit en
    Novembre 2006
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 11
    Par défaut
    Oui en effet, j'ai du me planter lors de mon test
    Ba re merci !

    problème résolu !

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

Discussions similaires

  1. recuperer le nom d'un fichier dans un item
    Par man_hacro dans le forum SQL*Loader
    Réponses: 0
    Dernier message: 17/07/2008, 13h43
  2. Commande sh permettant de récupérer le nom d'un fichier dans un repertoire
    Par Actarus78 dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 13/09/2006, 17h18
  3. Recupere le nom de l'application dans WinMain
    Par baert dans le forum Windows
    Réponses: 1
    Dernier message: 10/03/2006, 23h38
  4. extraire le nom d'un fichier dans une chaine sauf le car -
    Par digger dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 13/12/2005, 00h02
  5. Recuperer le nom d'un fichier
    Par elvivo dans le forum C
    Réponses: 5
    Dernier message: 27/12/2002, 15h44

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