2012-04-22 117 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); 

你也可以用更复杂的正则表达式来限制数字范围,但我有一种感觉,这足以满足你的需求。