Prég match texte en php entre les balises html

Bonjour je voudrais utiliser preg_match en PHP pour analyser le "texte désiré" à partir de ce qui suit d'un document html

<p class="review"> Desired text </p>

normalement j'utiliserais simple_html_dom pour de telles choses mais à cette occasion il ne peut pas être utilisé (l'élément ci-dessus n'apparaît pas dans chaque étiquette div désirée donc je suis forcé d'utiliser cette approche pour garder la trace de exactement quand il n'apparaît pas et puis ajuster mon tableau de simple_html_dom en conséquence).

quoi qu'il en soit, cela résoudrait mon problème.

Merci beaucoup.

18
demandé sur David Willis 2009-10-19 07:00:48

3 réponses

preg_match("'<p class=\"review\">(.*?)</p>'si", $source, $match);
if($match) echo "result=".$match[1];
61
répondu serg 2009-10-19 03:04:54

si vous voulez retourner plusieurs correspondances, alors vous devez utiliser preg_match_all(). Vous faites ensuite une boucle dans le second groupe de résultats ($match[1]) pour obtenir juste le contenu entre les balises.

$source = "<p class=\"review\"> Desired text1 </p>".
"<p class=\"review\"> Desired text2 </p>".
"<p class=\"review\"> Desired text3 </p>";


    preg_match_all("'<p class=\"review\">(.*?)</p>'si", $source, $match);

    foreach($match[1] as $val)
    {
        echo $val."<br>";


    }

Outputs:

Desired text1
Desired text2
Desired text3 
11
répondu Andy 2010-06-18 05:21:00

et si la chaîne que vous associez a plusieurs lignes et est:

<p class="review"> Desired text1 </p>
<p class="review"> Desired text2 </p>
<p class="review"> Desired text3 </p>

ce motif correspondrait une fois, et la correspondance serait tout dans la chaîne.

je pense qu'un meilleur modèle est le suivant:

"'<p class=\"review\">([^<]*)</p>'si"
6
répondu Ross Snyder 2010-03-03 05:20:00