2011-03-21 70 views
0
<?php 
$str= <<<ETO 
<p>one 
two</p> 
<p>three</p> 
ETO; 
preg_match_all('/<p>(.*?)<\/p>/',$str,$r); 
print_r($r); 
?> 

我在學preg_match_all。我想從一篇文章中獲得所有p。但我的代碼只獲得第二個p。如何修改,以便我可以得到第一個p,要麼。謝謝。php preg match all,all'p`

+0

你在錯誤地學習。 – BoltClock 2011-03-21 10:45:25

+0

@BoltClock,你能教我更多嗎?謝謝。 – cj333 2011-03-21 10:46:56

+3

這只是正則表達式通常是用於解析HTML的錯誤工具。 – BoltClock 2011-03-21 10:47:20

回答

4

您錯過了正則表達式末尾的/ims標誌。否則.將不符合換行符(如在第一段中)。其實/s就足夠了,但我總是使用所有三個簡單。

此外,preg_match適用於很多簡單的情況。但是,如果你正在嘗試更多的複雜的提取,再考慮到交替或phpQuery其中QueryPath允許:

foreach (qp($html)->find("p") as $p) { print $p->text(); } 
+0

對,謝謝,我忽略它,閱讀這本書更多... – cj333 2011-03-21 10:50:44

2

不匹配換行符(*?)。試試/ s修飾詞:

<?php 
$str= <<<ETO 
<p>one 
two</p> 
<p>three</p> 
ETO; 
preg_match_all('/<p>(.*?)<\/p>/s',$str,$r); 
print_r($r); 
?>