Page 1 sur 1

Extraire du texte entre 2 balises avec php

Posté : 16 mars 2013, 19:10
par Sébastien
Bonjour à vous tous,
J'ai un petit soucis.

J'ai récupéré ce code sur Internet (http://www.commentcamarche.net/forum/af ... s-avec-php)
<?php
$source = '<a href="/siteinfo/page1.html">Coco</a>
<a href="/siteinfo/page2.html">Riri</a>
<a href="/siteinfo/page3.html">Dada</a>';

preg_match_all('#<a href="(.+)">(.+)</a>#i', $source, $liens);

$nb = 0;
foreach($liens[0] as $complet) {
    $url = $liens[1][$nb];
    $texte = $liens[2][$nb];

    echo 'Lien complet : '.htmlspecialchars($complet).'<br />';
    echo 'URL : '.$url.'<br />';
    echo 'Texte : '.$texte.'<br />';
    echo '<hr />';

    $nb++;
}
?>

Il marche à la perfection...
Mais j'aimerai en plus pouvoir récupérer ce qu'il y a entre les balises liens... Je m'explique.

Imaginons le texte "source" ainsi :
<a href="/siteinfo/page1.html">Coco</a>... Récupérer tout ici...
<a href="/siteinfo/page2.html">Riri</a>... Et ici...
<a href="/siteinfo/page3.html">Dada</a>... Et là...
Comment récupérer tous ce qui se trouve entre les balises "<a>" !?
cela : "... Récupérer tout ici..."
et cela :"... Et ici..."
Et encore :"... Et là..."

Merci de votre aide.
DJ

Re: Extraire du texte entre 2 balises avec php

Posté : 16 mars 2013, 22:05
par sadeq
Bonjour, essaye cette RegExp:
preg_match_all('#</a>([^<]*)#i', $source, $liens);
C'est à dire : on sélectionne le contenu situé après </a> jusqu'à rencontrer un < qui annonce la présence d'une autre balise (ou rien comme l'atteste l'étoile *)

Re: Extraire du texte entre 2 balises avec php

Posté : 17 mars 2013, 11:32
par Sébastien
Bonjour Sadeq,
Merci de ta réponse.

Je me demandais si il était possible d'inclure ce nouvel RegExp à l'ancien.
Et ainsi avoir avec seulement un RegExp toutes les infos nécessaires.

Avec quelque chose comme cela :
preg_match_all('#<a href="(.+)">(.+)</a>(.+)#i', $source, $liens);
Mais cela semble ne pas fonctionner !?
Je n'arrive pas à récupérer :
$liens[4][$nb];
qui correspond au dernier " (.+) "...
Je n'arrive pas à l'inclure dans ma boucle " foreach " !?

Merci
DJ

Re: Extraire du texte entre 2 balises avec php

Posté : 17 mars 2013, 23:08
par sadeq
Oui comme ça :
preg_match_all('#<a href="(.+)">(.+)</a>([^<]*)#i', $source, $liens);

Re: Extraire du texte entre 2 balises avec php

Posté : 18 mars 2013, 10:48
par Perine
Les expressions régulières sont des outils inadéquats pour ça.
http://php.net/DOMDocument

Re: Extraire du texte entre 2 balises avec php

Posté : 18 mars 2013, 11:35
par Sébastien
Bonjour Sadeq,
Merci de ta réponse...
Cela fonctionne ! :o)

Bonjour Perine,
Je ne connais pas les "DOMDocument", et je suis allé voir sur le lien... pffff mazette ! Pas une mince affaire ...

Merci quand même ;o)

DJ