在preg_match之后获得前几个结果

时间:2016-05-13 10:43:34

标签: php preg-match

我正在为图像做一个简单的网页抓取。

$images = $dom->getElementsByTagName('img');

$ images return

DOMNodeList Object
(
   [length] => 19
)

如果我在foreach循环中打印$ src,它会显示19个结果。从这19个结果中,如果我在http匹配后再次打印$ src则显示11个结果。但是我想要在preg_match之后的那11个结果中得到前5个结果。

怎么可能?

foreach ($images as $keys=>$image) {                

   $src = $image->getAttribute('src');
    if(preg_match('/^http/', $src)){

    }
}

3 个答案:

答案 0 :(得分:3)

使用以下代码进行测试

$loopCount = 1;
foreach ($images as $keys=>$image) {                
   $src = $image->getAttribute('src');
    if(preg_match('/^http/', $src)) {
        //assuming here you need to check count
        $loopCount ++;
        //your action
        if($loopCount > 5) {
           break;  //to avoid unnecessary loops
        }
    }
}

它将为您提供前5个正则表达式匹配记录

答案 1 :(得分:0)

您可以将第三个参数传递给preg_match函数,该函数将返回所有匹配的结果

foreach ($images as $keys=>$image) {                

   $src = $image->getAttribute('src');
    $matches = [];
    if(preg_match('/^http/', $src,$matches)){   // pass third parameter 
                                  ^^ will store all matched results

       print_r($matches); // Will show all matched results
       // Now you can use any of matched results for `$matches`

       // just an example
       $data[] = $matches[0];
       $data[] = $matches[1];
       $data[] = $matches[2];
       $data[] = $matches[3]; 
       $data[] = $matches[4];
    }
}

答案 2 :(得分:0)

如果"前5个结果"一个好的方法是停止循环。获得:

$count = 5;
foreach ($images as $keys => $image) {

   if (!count) break;   // avoid redundant loop iterations
   $src = $image->getAttribute('src');
   if (preg_match('/^http/', $src)) {
       // processing the image item
       $count--;
   }
}