在HTML中匹配img src名称

时间:2015-01-01 14:11:40

标签: java regex

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

我怎样才能"匹配"我的照片。 规则是:

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

    这是我有一个愚蠢的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>
    

    谢谢!

2 个答案:

答案 0 :(得分:2)

几乎在所有情况下,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"));
    }
}

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

[如Pshemo所述]

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

答案 1 :(得分:0)

要匹配图像使用:

(?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();
}