23

您好,我想在 PHP 中使用 preg_match 从 html 文档中解析出以下内容中的“所需文本”

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

通常我会使用 simple_html_dom 来处理这些事情,但在这种情况下它不能被使用(上面的元素没有出现在每个所需的 div 标签中,所以我不得不使用这种方法来准确跟踪它什么时候没有出现和然后相应地从 simple_html_dom 调整我的数组)。

无论如何,这将解决我的问题。

非常感谢。

4

3 回答 3

72
preg_match("'<p class=\"review\">(.*?)</p>'si", $source, $match);
if($match) echo "result=".$match[1];
于 2009-10-19T03:04:54.130 回答
10

如果要返回多个匹配项,则需要使用 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 
于 2010-06-18T05:21:00.897 回答
7

如果您匹配的字符串有多行并且是:

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

该模式将匹配一次,并且匹配将是字符串中的所有内容。

我认为更好的模式是:

"'<p class=\"review\">([^<]*)</p>'si"
于 2010-03-03T05:20:00.157 回答