代码之家  ›  专栏  ›  技术社区  ›  deblocker

regex从html、css和javascript中提取所有图像文件

  •  0
  • deblocker  · 技术社区  · 8 年前

    我需要得到一个在我的html、css和javascript文件中引用的所有图像文件的列表。

    以下是我将在文件中找到的一些示例:

    CSS:
    ul li {
        list-style-image: url('data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7');
    }
    
    #insert { background-image: url('../img/insert.jpg'); }
    #delete { background-image: url('../img/delete.png'); }
    
    HTML:
    <link rel="icon" sizes="192x192" href="touch-icon-192x192.png">
    <img id="home" src="img/home.png" class="img-home">
    
    JavaScript:
    "BackgroundImageUrl": "textures/glass.jpg"
    

    使用 https://regex101.com/ 我想到了下面的表达:

    /[\"'](.*(png|jpg|gif))[\"']?/ig
    

    但是我也包括了我不需要的base64编码文件,而且在我的html匹配中也有一些不必要的部分,例如:

    "icon" sizes="192x192" href="touch-icon-192x192.png"
    

    我只需要 touch-icon-192x192.png 是的。

    如何用php解析我的文件并得到一个完整的引用列表 png 我是说, gif jpeg 图像是 regex 这很好,还是有更好的方法在php中完成这样的任务?

    编辑:

    这里接受的答案是: How do you parse and process HTML/XML in PHP? 是一个软件库和其他场外资源的集合,我在这里要问的是一个与编程相关的问题,关于regex。

    1 回复  |  直到 8 年前
        1
  •  1
  •   Toto    8 年前

    有一种方法可以完成这项工作:

    $input = <<<EOD
    CSS:
    ul li {
        list-style-image: url('data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7');
    }
    
    #insert { background-image: url('../img/insert.jpg'); }
    #delete { background-image: url('../img/delete.png'); }
    
    HTML:
    <link rel="icon" sizes="192x192" href="touch-icon-192x192.png">
    <img id="home" src="img/home.png" class="img-home">
    
    JavaScript:
    "BackgroundImageUrl": "textures/glass.jpg"
    EOD;
    
    preg_match_all('/(?<=["\'])[^"\']+?\.(?:jpe?g|png|gif)(?=["\'])/', $input, $m);
    print_r($m);
    

    输出:

    Array
    (
        [0] => Array
            (
                [0] => ../img/insert.jpg
                [1] => ../img/delete.png
                [2] => touch-icon-192x192.png
                [3] => img/home.png
                [4] => textures/glass.jpg
            )
    
    )
    

    说明:

    (?<=["\'])          : lookbehind, make sure we have a quote before
    [^"\']+?            : 1 or more any character that is not a quote
    \.                  : a dot
    (?:jpe?g|png|gif)   : non capture group, list of image extensions
    (?=["\'])           : lookahead, make sure we have a quote after