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 entre 2 balises


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 145
    Points : 59
    Points
    59
    Par défaut Regex entre 2 balises
    Bonjour à tous,

    je cherche un regex qui puisse me ressortir les adresses dans le code ci-dessous :

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <ul>
    	<li>
    		<a class="external" href="URL">Personne 1</a>
    		<div>Adresse 1</div>
    		<div>CP 1</div>
    	</li>
    </ul>
    <ul>
    	<li>
    		<a class="external" href="URL">Personne 2</a>
    		<div>Adresse 2</div>
    		<div>CP 2</div>
    	</li>
    </ul>

    Ainsi j'aurais besoin de récupérer les 3 informations par (nom, adresse, cp) par section <li>.
    Malgré tout mes essais, je ne parviens pas à y arriver.

    Une idée ou au moins un point de départ ?

  2. #2
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Pour faire ça, il faut mieux te tourner vers DOMDocument qui va construire une représentation arborescente du code html facilement interrogeable, exemple:
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    $html = '<ul>
        <li>
            <a class="external" href="URL">Personne 1</a>
            <div>Adresse 1</div>
            <div>CP 1</div>
        </li>
    </ul>
    <ul>
        <li>
            <a class="external" href="URL">Personne 2</a>
            <div>Adresse 2</div>
            <div>CP 2</div>
        </li>
    </ul>';
     
    $dom = new DOMDocument;
    $dom->loadHTML($html);
     
    $lis = $dom->getElementsByTagName('li');
     
    $results = [];
     
    foreach ($lis as $li) {
        $link = $li->getElementsByTagName('a')->item(0);
        $divs = $li->getElementsByTagName('div');
     
        $results[] = [
            'personne' => $link->nodeValue,
            'adresse'  => $divs->item(0)->nodeValue,
            'CP'       => $divs->item(1)->nodeValue
        ];
    }
     
    print_r($results);
    À propos de l'approche par regex:

    Il est évident qu'une recherche directe dans la chaîne par regex si elle est bien construite (ou avec les fonctions de manipulation de chaîne pour les cas triviaux) sera toujours plus performante qu'une approche avec un outil comme DOMDocument, car ce dernier doit auparavant construire l'arbre ce qui représente un coût que n'a pas à payer l'autre méthode.

    Par contre, l'avantage de l'approche DOMDocument est qu'elle permet d'interroger un code html en se basant juste sur la structure du document et ce, indépendamment des particularités de la chaîne de départ (ordre des attributs, casse utilisée pour les tags, espaces entre les balises...), voire même en passant outre certaines erreurs html (avec plus ou moins de bonheur, il faut bien l'avouer).
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

Discussions similaires

  1. Récupérer la valeur entre 2 balises en utilisant Regex
    Par new123 dans le forum Général Java
    Réponses: 5
    Dernier message: 08/04/2011, 10h38
  2. Réponses: 6
    Dernier message: 17/02/2010, 19h48
  3. [Debutant]Edition du contenu entre les balises
    Par Perceval dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 01/06/2005, 09h16
  4. Empêcher le retour á la ligne entre des balises <Hx> e
    Par thomas_chamas dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 29/11/2004, 16h39
  5. [Balise XML] Comment récupérer le contenu entre 2 balise?
    Par ZoumZoumMan dans le forum C++Builder
    Réponses: 5
    Dernier message: 05/03/2004, 16h36

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