匹配 HTML 中的 img src 名称

Match img src name in HTML

我有一张图片列表,其中一些图片用于网络。 我需要统计网站上使用了哪些图像以及在哪些页面等。

如何 "match" 我的图像。 规则是:

  1. 我只有文件名,即 "mypic.png"
  2. 这是我要构建的正则表达式 <img[anything]src=("or')[anything]mypic.png[anything]("or')[anything]>

这是一个笨蛋HTML我有

<figure class="gr_col gr_2of3">
    <div class="mll mrm mbs md_pic_wrap1">
        <a href="http://mydomain/nice-page" title="title test">
            <img alt="alt text" class="mbm" src="http://mydomain/file-pic2/mypic.png" width="95" height="95">
        </a>
    </div>
</figure>

谢谢!

HTML 和正则表达式几乎在所有情况下都非常糟糕。使用旨在执行您需要完成的工作的工具,例如JSoup.

Document document = Jsoup.parse(htmlStringOrFile);
for(Element img : document.select("img")) {
    if(img.attr("src").contains("mypic.png")) {
        System.out.println(img.attr("alt"));
    }
}

这将打印在 中包含 mypic.png 的所有 img 元素的 alt 属性的值]src。将 alt 替换为 nameid 或任何最适合您的情况。

[如 Pshemo 所述]

选择器可以是任何 CSS 选择器,因此您可以通过将其替换为本质上具有相同语义的 img[src*=mypic.png] 来削减条件检查甚至循环本身。

要匹配图像,请使用:

(?i)<img.*?src=["'].*?(mypic\.png).*?["'].*?>

在捕获组 1 中有匹配的图像名称。


public String buildRegex(String... nameList) {
    StringBuilder regex = new StringBuilder();
    regex.append("(?i)<img.*?src=[\"'].*?(");
    for (int i = 0; i < nameList.length - 1; i++) {
        regex.append(nameList[i].replaceAll("\.", "\\.")).append("|");
    }
    regex.append(nameList[nameList.length - 1].replaceAll("\.", "\\."));
    regex.append(").*?[\"'].*?>");
    return regex.toString();
}