正则表达式从HTML中提取图像 - 如何只获取JPG?

时间:2011-06-18 20:34:55

标签: php regex jpeg

我正在使用此PHP函数来获取任何给定HTML中的所有<img>标记。

function extract_images($content)
{
    $img    = strip_tags(html_entity_decode($content),'<img>');
    $regex  = '~src="[^"]*"~';    

    preg_match_all($regex, $img, $all_images);

    return $all_images;
}

这有效并返回 所有 图片(gif,png,jpg等)。

任何人都知道如何更改正则表达式...

~src="[^"]*"~

只能获取 JPG或JPEG 扩展名的文件?

非常感谢。

2 个答案:

答案 0 :(得分:4)

Regex Enforcement Agency迟早会出现。它可能也是我:)。

正确的方法是使用正确的HTML DOM解析器。这是一个DOMDocument解决方案。这样做的有用之处在于它比通过正则表达式解析HTML更强大,并且还使您能够同时访问或修改<img>节点上的其他HTML属性。

$dom = new DOMDocument();
$dom->loadHTML($content);

// To hold all your links...
$links = array();

// Get all images
$imgs = $dom->getElementsByTagName("img");
foreach($imgs as $img) {
  // Check the src attr of each img
  $src = "";
  $src = $img->getAttribute("src");
  if (preg_match("/\.jp[e]?g$/i", $src) {

    // Add it onto your $links array.
    $links[] = $src;
}

查看简单正则表达式解决方案的其他答案,或者从我的foreach循环中的正则表达式进行调整。

答案 1 :(得分:2)

/src="[^"]*\.(jpg|jpeg)"/i

i - &gt;不区分大小写的匹配