web-dev-qa-db-fra.com

Preg fait correspondre le texte en php entre les balises html

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

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

Habituellement, 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 balise div souhaitée, donc je suis obligé d'utiliser cette approche pour garder une trace exacte de quand il n'apparaît pas et puis ajustez mon tableau de simple_html_dom en conséquence).

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

Merci beaucoup.

20
David Willis
preg_match("'<p class=\"review\">(.*?)</p>'si", $source, $match);
if($match) echo "result=".$match[1];
67
serg

si vous souhaitez renvoyer plusieurs correspondances, vous devez utiliser preg_match_all (). Vous parcourez ensuite le deuxième groupe de résultats ($ match [1]) pour obtenir uniquement 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
Andy N

Que se passe-t-il si la chaîne que vous correspondez a plusieurs lignes et est:

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

Ce modèle correspondrait une fois, et la correspondance serait tout dans la chaîne.

Je pense qu'un meilleur schéma est:

"'<p class=\"review\">([^<]*)</p>'si"
7
Ross Snyder