2012-04-22 126 views
0

我是Php的新手,想做一個preg_match來抓取本地HTML文件中的數據。我寫了下面的代碼:

preg_match('#\<span class=\"creativeT\" id=\"SCreativeDesc1\">(.*?)\<\/span>#',$html,$creativedesc); 

它正常工作時的具體SCreativeDesc「1」,但是當我把它放在一個循環與$ I(即SCreativeDesc $ I),它激發了我的錯誤。

for ($i=1;$i<=$totalCreatives;$i++){ 
    preg_match('#\<span class=\"creativeT\" id=\"SCreativeDesc$i\">(.*?)\<\/span>#',$html,$creativedesc); 
} 

要麼我把:

for ($i=1;$i<=$totalCreatives;$i++){ 
    preg_match('#\<span class=\"creativeT\" id=\"SCreativeDesc" . $i . "\">(.*?)\<\/span>#',$html,$creativedesc); 
} 

它也不能正常工作,可我怎麼做一個循環?正如在HTML中它重複了大約100次,我不想寫這個抓取100行。

+1

你不能只在正則表達式模式中放置一個變量。 – Jack 2012-04-22 06:16:01

+0

嗯,是的,你可以,PHP會將它解釋爲一個字符串,如果你使用雙引號而不是單引號,然後正則表達式只是看到字面值,則替換爲變量的值。 – hackartist 2012-04-22 06:19:09

+0

你可以使用:\ d {1,3}' – hjpotter92 2012-04-22 06:20:47

回答

1

無需循環:

preg_match('#\<span class=\"creativeT\" id=\"SCreativeDesc' . $i . '\">(.*?)\<\/span>#',$html,$creativedesc); 
+0

謝謝dtbarne!所以對我愚蠢的俯視感到抱歉。 :) – 2012-04-22 08:40:27

-1

您甚至沒有正確關閉引號。您在開頭和結尾處使用單引號',雙引號"。 你想要的是:這裏

for ($i=1;$i<=$totalCreatives;$i++){ 
    $re = "#\<span class=\"creativeT\" id=\"SCreativeDesc" . $i . "\">(.*?)\<\/span>#"; 
    preg_match($re,$html,$creativedesc); 
} 
0

嘗試這種方式。

preg_match('#\<span class=\"creativeT\" id=\"SCreativeDesc[0-9]+\">(.*?)\<\/span>#',$html,$creativedesc); 

你也可以用更復雜的正則表達式來限制數字範圍,但我有一種感覺,這足以滿足你的需求。