【问题标题】:Regex to extract images from HTML - how to get only JPGs?正则表达式从 HTML 中提取图像 - 如何仅获取 JPG?
【发布时间】:2011-09-17 22:19:21
【问题描述】:

我正在使用这个 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 扩展名的文件?

非常感谢。

【问题讨论】:

    标签: php regex jpeg


    【解决方案1】:

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

    正确的方法是使用适当的 HTML DOM 解析器。这是DOMDocument 解决方案。这样做的用处在于它比通过正则表达式解析 HTML 更健壮,并且还使您能够同时访问或修改 &lt;img&gt; 节点上的其他 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 循环中的正则表达式进行调整。

    【讨论】:

    • @michael 这句话怎么说? “当你试图用正则表达式解决一个问题时,你实际上有两个问题?” :) -- 谢谢你的代码,我看看能不能实现
    • @torr regex.info/blog/2006-09-15/247 “有些人在遇到问题时会想“我知道,我会使用正则表达式。”现在他们有两个问题。”
    • @michael - 马上! - 看起来你的代码可以工作,但我遇到了一堆错误,比如Namespace prefix fb of attribute like:layout is not defined in Entity, line: 179htmlParseEntityRef: expecting ';' in Entity, line: 349——我想知道这些是不是因为标记无效。我正在通过file_get_contents 提取 HTML。您认为这里使用@$dom-&gt;loadHTML($content) 抑制错误是不好的做法吗?
    • @torr 尝试设置$dom-&gt;strictErrorChecking = FALSE;。否则simplexml_load_string() 可能比 DOMDocument 更宽容?
    • @torr 否则,如果您无法控制两端,则抑制其上的警告可能不会有什么坏处。 (请不要因为我这么说而对我投反对票!)
    【解决方案2】:
    /src="[^"]*\.(jpg|jpeg)"/i
    

    i -> 不区分大小写匹配

    【讨论】:

    • 您需要注意这里,以防有人在值周围使用单引号。
    • 感谢@peter - 现在我将使用 DOMDocument 如下,但您的正则表达式工作正常
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-21
    • 1970-01-01
    • 2012-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多