如何使用preg_match_all组合两个抓取的变量?

时间:2012-05-04 19:03:34

标签: php

我使用preg_match_all从另一个页面抓取网址和标题,抓住就可以了但是我无法使用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);

以下代码显示抓取的网址

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

$i++;
}

以下代码显示抓取的标题

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

但我不知道如何在一个foreach中显示它们(url&amp; title)所以我可以使它像

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

1 个答案:

答案 0 :(得分: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];