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 qui ne marche que dans certains cas


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 126
    Points : 55
    Points
    55
    Par défaut REGEX qui ne marche que dans certains cas
    Bonjour, je dois extraire de l'information de lignes qui ressemblent à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <DT><A HREF="http://www.google.fr/" ADD_DATE="1261570080" LAST_MODIFIED="1261570080" ICON_URI="http://www.google.fr/favicon.ico" ICON="data:image/png;base64,iVBORwoAAf8/9hAAg==" LAST_CHARSET="UTF-8">Titre de la page</A>
    Il me faut HREF, l'Ancre (Titre du lien) ainsi que la date ADD_DATE. Voici les expressions que j'utilise :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    $this->title	= ereg_replace ("^( *<DT><[^>]*>)([^<]*)(.*)", "\\2", $line);
    $this->url	= ereg_replace ("([^H]*HREF=\")([^\"]*)(\".*)", "\\2", $line);
    $this->date	= ereg_replace ("([^A]*ADD_DATE=\")([^\"]*)(\".*)", "\\2", $line);
    ?>
    Title et url marchent bien, par contre date foire.

    Ça me retourne <DT><A1261570080 quand l'attribut ADD_DATE existe, et la ligne entière si l'attribut n'existe pas.

    Comment faire pour que ça fonctionne ?
    Merci

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 669
    Points
    66 669
    Billets dans le blog
    1
    Par défaut
    essaye en une seule fois :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $html='<DT><A HREF="http://www.google.fr/" ADD_DATE="1261570080" LAST_MODIFIED="1261570080" ICON_URI="http://www.google.fr/favicon.ico" ICON="data:image/png;base64,iVBORwoAAf8/9hAAg==" LAST_CHARSET="UTF-8">Titre de la page</A>'; 
    $reg='#(?:<DT><A\s*HREF=")(?<href>[^"]*)(?:"\s*ADD_DATE=")(?<date>[^"]*)(?:"[^>]*>)(?<titre>[^<]*)#';
    preg_match($reg, $html, $matches);
    echo 'href: '.$matches['href'].'<br/>';
    echo 'date: '.$matches['date'].'<br/>';
    echo 'titre: '.$matches['titre'].'<br/>';
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  3. #3
    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 : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    essaye en une seule fois :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $html='<DT><A HREF="http://www.google.fr/" ADD_DATE="1261570080" LAST_MODIFIED="1261570080" ICON_URI="http://www.google.fr/favicon.ico" ICON="data:image/png;base64,iVBORwoAAf8/9hAAg==" LAST_CHARSET="UTF-8">Titre de la page</A>'; 
    $reg='#(?:<DT><A\s*HREF=")(?<href>[^"]*)(?:"\s*ADD_DATE=")(?<date>[^"]*)(?:"[^>]*>)(?<titre>[^<]*)#';
    preg_match($reg, $html, $matches);
    echo 'href: '.$matches['href'].'<br/>';
    echo 'date: '.$matches['date'].'<br/>';
    echo 'titre: '.$matches['titre'].'<br/>';
    Juste une remarque sur cette solution : lorsque les motifs commencent à être compliqués, il est plus que souhaitable d'utiliser l'option x qui permet d'indenter et de commenter un motif.
    Par exemple, je réécrirais le motif ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $reg='{
    <DT><A\s*HREF="  #positionnement au début du lien
    (?<href>[^"]*)   #capture nommée href du lien
    "\s*ADD_DATE="   #positionnement au début de la date
    (?<date>[^"]*)   #capture nommée date de la date
    "[^>]*>          #positionnement au début du titre
    (?<titre>[^<]*)  #capture nommée titre
    }x';
    Au passage, j'ai changé les délimiteurs, le # étant justement le marqueur de commentaire et j'ai supprimé les parenthèses non-capturantes inutiles car non quantifiées.
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 669
    Points
    66 669
    Billets dans le blog
    1
    Par défaut
    Merci de ses précision snaf
    Juste une question concernant les parenthèses non capturantes, je pensais justement que c'était moins gourmand.
    Il est vrai que le but est de cibles les groupes nommés.
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  5. #5
    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 : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    C'est moins gourmand que des parenthèses capturantes, mais cela n'a aucun avantage par rapport à l'absence totale de parenthèses.
    Les parenthèses non-capturantes sont utilisées lorsqu'elles sont quantifiées, afin de pouvoir répéter un groupe sans le capturer.
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

Discussions similaires

  1. [Port série] [QExtSerialPort] write() ne fonctionne que dans certains cas
    Par sybe30 dans le forum Bibliothèques
    Réponses: 1
    Dernier message: 14/12/2012, 19h27
  2. Réponses: 7
    Dernier message: 07/04/2011, 10h42
  3. Classement qui ne fonctionne pas dans certains cas
    Par Furious68 dans le forum Requêtes
    Réponses: 4
    Dernier message: 19/05/2010, 16h47
  4. Réponses: 10
    Dernier message: 17/01/2010, 20h58
  5. Tétraèdrisation ne fonctionne que dans certains cas
    Par Rafy dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 15/12/2008, 20h51

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