Preg сопоставляет текст в php между тегами html

Здравствуйте, я хотел бы использовать preg_match в PHP для анализа «Желаемого текста» из следующего документа html.

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

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

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

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


person David Willis    schedule 19.10.2009    source источник


Ответы (3)


если вы хотите вернуть несколько совпадений, вам нужно использовать 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 
person Andy N    schedule 18.06.2010

Что, если строка, которую вы сопоставляете, состоит из нескольких строк и имеет вид:

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

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

Я думаю, что лучший образец:

"'<p class=\"review\">([^<]*)</p>'si"
person Ross Snyder    schedule 03.03.2010
comment
да, спасибо, я пробовал кое-что в течение последних 2 часов, и я, наконец, понял, что акции отображаются с помощью JavaScript после загрузки страницы :((( так что да, вот почему скрипт не работал, спасибо всем - person Adrian Tanase; 09.08.2012

person    schedule
comment
Работает идеально. Вы сэкономили мне несколько часов, большое спасибо за это. - person David Willis; 19.10.2009
comment
Разве это не может превзойти? Смотрите мой ответ ниже. - person Ross Snyder; 03.03.2010
comment
Это не будет превосходить из-за ленивой количественной оценки. .*? возьмет как можно меньше, а .* возьмет как можно больше. - person serg; 03.03.2010