Предварительно сопоставьте текст на php между тегами html


Здравствуйте, я хотел бы использовать preg_match в PHP для анализа "Нужного текста" из следующего html-документа

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

Обычно я бы использовал simple_html_dom для таких вещей, но в данном случае его нельзя использовать (приведенный выше элемент не отображается в каждом нужном теге div, поэтому я вынужден использовать этот подход, чтобы точно отслеживать, когда он не появляется, а затем соответствующим образом настроить свой массив из simple_html_dom).

В любом случае, это решило бы мою проблема.

Большое спасибо.

Author: David Willis, 2009-10-19

3 answers

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

Если вы хотите вернуть несколько совпадений, то вам нужно использовать preg_match_all(). Затем вы проходите по второй группе результатов ($match[1]), чтобы получить только содержимое между тегами.

$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
Author: Andy, 2010-06-18 05:21:00

Что делать, если строка, с которой вы сопоставляете, содержит несколько строк и является:

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

Этот шаблон будет совпадать один раз, и совпадением будет все в строке.

Я думаю, что лучший шаблон:

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