0

我使用 preg_match_all 从另一个页面抓取 url 和标题,抓取没问题,但我无法使用 foreach 将它们放入其中!还是有另一种方法代替foreach?

//gets URLs of href='xxxx'   
 preg_match_all('/a href="([^"]+)" class=l.+?>.+?<\/a>/',$sear,$results);

//gets titles of >xxxx</a>   
    preg_match_all('/a href=".+?" class=l.+?>([^"]+)<\/a>/',$sear,$t);

下面的代码显示抓取的 URL

foreach ($results[1] as $url)
{
echo "<a href='$url'>$u</a> <br>";

$i++;
}

下面的代码显示抓取的标题

   foreach ($t[1] as $title)
   { 
   echo $title; 
   $i++;
   }

但我不知道如何在一个 foreach 中显示它们(网址和标题),所以我可以让它像

<a href='URL'>Title</a> 
4

1 回答 1

1

结合这两个正则表达式以一次捕获两个项目:

preg_match_all('/<a href="([^"]+)" class=l.+?>([^<]+)<\/a>/',$sear, $results);
var_dump( $results);

现在您在捕获组 1 和 2 中同时拥有 URL 和标题。

对此正则表达式的改进是使用积极的前瞻来匹配关闭</a>,但为简单起见,您当前的解决方案应该没问题。

编辑:我最初把它留给 OP 来弄清楚如何从结果中获取正确的输出。但是,这是一个工作示例。

for( $i = 0; $i < count( $results[1]); $i++)
    echo 'URL: ' . $results[1][$i] . ', Title: ' . $results[2][$i];
于 2012-05-04T19:06:17.700 回答