我正在为图像做一个简单的网页抓取。
$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)){
}
}
答案 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--;
}
}