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> 

我是php新手,请帮助我!

4

3 回答 3

1

使用 PREG_SET_ORDER 标志在一个表达式中匹配它们:

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

然后,您的结果数组中将有两个匹配的组。每个元素将包含每个匹配集的数组(手册对此标志进行了很好的解释),您可以循环遍历$results数组,然后从内部获取每个组。

于 2012-05-04T19:48:22.540 回答
1

您可以使用正常for周期:

if ( count($result[1]) == count($t[1]) ){
    for ( $i = 0; $i < count($result[1]); $i++ ){
        echo "<a href='" . $result[1][$i] . "'>" . $t[1][$i] . "</a> <br>";
    }
}

现在,只有在 URL 和标题的数量都匹配时才应该使用它。您还应该考虑以相同的方式匹配 URL 和标题preg_match_all,这样您就不需要访问两个数组而是单个数组...(正如 Brian Warshaw 建议的那样)

于 2012-05-04T19:48:25.347 回答
1

如何同时匹配 URL 和链接显示文本:

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

您的$results数组现在应该在[1][2]索引中包含两个匹配的值:

foreach ($results as $link) {
  $url = $link[1];
  $text = $link[2];

  echo "Link '$text' to $url";
}
于 2012-05-04T19:48:54.740 回答