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 :

Regexp et <table> [RegEx]


Sujet :

Langage PHP

  1. #1
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 269
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 269
    Points : 8 568
    Points
    8 568
    Billets dans le blog
    17
    Par défaut Regexp et <table>
    Hello à tous,
    J'essaie de récupérer le contenu d'une <table> bien précise (celle ayant pour ID "fruits") mais seul le dernier enregistrement de la table en question est obtenu.
    Voici un testcase illustrant le souci :

    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
    <?php
        header('Content-Type: text/plain') ;
     
        $s = '<table><tr><td>Foo</td></tr><tr><td>Bar</td></tr></table>'
           . '<table id="fruits">'
           . '<tr><td>Pomme</td><td>Pommier</td></tr>'
           . '<tr><td>Poire</td><td>Poirier</td></tr>'
           . '<tr><td>Mangue</td><td>Manguier</td></tr>'
           . '</table>'
           . '<table id="pays"><tr><td>France</td><td>Paris</td></tr></table>' ;
     
        $regexp = '`<table id="fruits">(?:<tr><td>(.*)</td><td>(.*)</td></tr>)+</table>`Us' ;
        preg_match_all($regexp, $s, $matches, PREG_SET_ORDER) ;
        print_r($matches) ;
    ?>
    Voici ce que j'obtiens :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Array
    (
        [0] => Array
            (
                [0] => <table id="fruits"><tr><td>Pomme</td><td>Pommier</td></tr><tr><td>Poire</td><td>Poirier</td></tr><tr><td>Mangue</td><td>Manguier</td></tr></table>
                [1] => Mangue
                [2] => Manguier
            )
     
    )
    Alors que j'attendais :

    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
    18
    19
    20
    21
    Array
    (
        [0] => Array
            (
                [0] => ...
                [1] => Pomme
                [2] => Pommier
            )
        [1] => Array
            (
                [0] => ...
                [1] => Poire
                [2] => Poirier
            )
        [2] => Array
            (
                [0] => ...
                [1] => Mangue
                [2] => Manguier
            )
    )
    Une idée ?
    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 : 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
    Je pense que ta regex ne matche effectivement qu'une seule fois, d'où la réponse unique.
    Pourquoi ?
    A cause des balises <table> qui n'existent qu'une seule fois.
    Du coup, ça change ton problème, parce qu'il est vrai que tu en as besoin pour identifier la table.
    Je vois deux solutions :
    - double regex pour capturer toute la table puis faire un preg_match_all
    - faire plutôt une analyse XML (SimpleXML peut être adapté)

    @+

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    138
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2005
    Messages : 138
    Points : 173
    Points
    173
    Par défaut
    +1 pour simpleXML qui est vraiment trop simple d'utilisation

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

Discussions similaires

  1. passage d'un nom de table dans une procédure stockée
    Par thierry V dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 26/07/2010, 17h48
  2. Réparation table/entête endommagée
    Par tbesrour dans le forum Paradox
    Réponses: 15
    Dernier message: 27/11/2007, 11h42
  3. [ADO] Tester l'existence d'une table
    Par nd25 dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 05/09/2002, 14h55
  4. Newbie......compilateur et table de caractères
    Par Cyberf dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 21/08/2002, 15h29
  5. [Comparatifs] Limites nombres tables et quantité de données
    Par benj63 dans le forum Décisions SGBD
    Réponses: 7
    Dernier message: 13/06/2002, 22h31

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