PHP-preg_与for循环$i匹配

PHP-preg_与for循环$i匹配,php,preg-match,Php,Preg Match,我是Php新手,想做一个preg_match从本地HTML文件中提取数据。我写的代码如下: preg_match('#\<span class=\"creativeT\" id=\"SCreativeDesc1\">(.*?)\<\/span>#',$html,$creativedesc); preg#u match(“#\(.*?)\#',$html,$creativedesc); 当特定的SCreateveDesc为“1”时,它可以正常工作,但当我将它与$I(即S

我是Php新手,想做一个
preg_match
从本地HTML文件中提取数据。我写的代码如下:

preg_match('#\<span class=\"creativeT\" id=\"SCreativeDesc1\">(.*?)\<\/span>#',$html,$creativedesc);
preg#u match(“#\(.*?)\#',$html,$creativedesc);
当特定的SCreateveDesc为“1”时,它可以正常工作,但当我将它与$I(即SCreateveDesc$I)放在一个循环中时,它会触发一个错误

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

对于($i=1;$i您甚至没有正确地关闭引号。您在开始时使用了单引号
,而在结束时使用了双引号
。 你想要的是:

preg_match('#\<span class=\"creativeT\" id=\"SCreativeDesc' . $i . '\">(.*?)\<\/span>#',$html,$creativedesc);
preg#u match(“#\(.*?)\#',$html,$creativedesc);
试着这样做:

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

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

你也可以用稍微复杂一点的正则表达式来限制数字范围,但我觉得这足以满足你的需要。

你不能只在正则表达式模式中放一个变量。嗯,是的,你可以,如果你使用双引号而不是单引号,php会将它解释为字符串,并替换变量的值,然后正则表达式只看到文本值。您可以使用:
\d{1,3}
@Jack检查数字。您可以将php中的正则表达式模式视为普通字符串(因为它是)。因此,您可以插入和连接
preg_match('#\<span class=\"creativeT\" id=\"SCreativeDesc[0-9]+\">(.*?)\<\/span>#',$html,$creativedesc);