Ответ 1
preg_match("'<p class=\"review\">(.*?)</p>'si", $source, $match);
if($match) echo "result=".$match[1];
Здравствуйте, я хотел бы использовать preg_match в PHP для анализа "желаемого текста" из следующего из html-документа
<p class="review"> Desired text </p>
Обычно я использовал бы simple_html_dom для таких вещей, но в этом случае он не может быть использован (этот элемент не появляется в каждом желаемом теге div, поэтому я вынужден использовать этот подход, чтобы отслеживать, когда он не работает) t, а затем отредактируйте мой массив из simple_html_dom соответственно).
В любом случае, это решит мою проблему.
Большое спасибо.
preg_match("'<p class=\"review\">(.*?)</p>'si", $source, $match);
if($match) echo "result=".$match[1];
если вы хотите вернуть несколько совпадений, тогда вам нужно использовать 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
Что делать, если строка, которую вы сопоставляете, имеет несколько строк и есть:
<p class="review"> Desired text1 </p>
<p class="review"> Desired text2 </p>
<p class="review"> Desired text3 </p>
Этот шаблон будет совпадать один раз, и совпадением будет все в строке.
Я думаю, что лучший шаблон:
"'<p class=\"review\">([^<]*)</p>'si"