我想在PHP中使用preg_match函数从HTML文档中解析以下内容中的"Desired text":
<p class="review"> Desired text </p>
通常我会使用simple_html_dom来处理这些事情,但在这种情况下无法使用(由于上述元素不出现在每个所需的div标签中,因此我被迫使用这种方法来准确地跟踪它何时不出现,然后根据情况调整我的simple_html_dom数组)。
不管怎样,这将解决我的问题。
非常感谢。
我想在PHP中使用preg_match函数从HTML文档中解析以下内容中的"Desired text":
<p class="review"> Desired text </p>
通常我会使用simple_html_dom来处理这些事情,但在这种情况下无法使用(由于上述元素不出现在每个所需的div标签中,因此我被迫使用这种方法来准确地跟踪它何时不出现,然后根据情况调整我的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"
.*?
会尽可能地匹配最少数量的字符,而.*
会匹配尽可能多的字符。 - serg