2009-10-19 67 views
14

你好,我想使用的preg_match在PHP解析“所需的文本”了,从一个html文档以下的的Preg匹配文本

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

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

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

非常感谢。

回答

54
preg_match("'<p class=\"review\">(.*?)</p>'si", $source, $match); 
if($match) echo "result=".$match[1]; 
+1

完美的作品。为我节省了几个小时,非常感谢。 – 2009-10-19 03:11:39

+1

不客气:) – serg 2009-10-19 03:14:55

+0

这难道不会超越吗?请参阅下面的答案。 – 2010-03-03 05:17:23

6

如果你匹配的字符串有多条线路是:

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

这种模式将匹配一次,这场比赛将是字符串中的一切。

我想一个更好的模式是:

"'<p class=\"review\">([^<]*)</p>'si" 
+0

是的,谢谢,我一直在尝试过去2小时的东西,我终于意识到股票正在用JavaScript显示,页面加载后:(((那么,那么,这就是为什么该脚本不工作谢谢所有 – 2012-08-09 09:57:51

+0

绝对是正确的答案。 – user1645377 2016-04-28 09:04:56

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