Java:匹配所有不以.htm结尾的字符串?“

时间:2014-10-01 20:35:57

标签: java html regex string-parsing

我正在使用正则表达式解析Java中的HTML文件,我想知道如何匹配所有href ="" not 的元素以.htm.html结尾,如果匹配,则将引号之间的内容捕获到组中

这些是我迄今为止尝试过的:

href\s*[=]\s*"(.+?)(?![.]htm[l]?)"

href\s*[=]\s*"(.*?)(?![.]htm[l]?)"

href\s*[=]\s*"(?![.]htm[l]?)"

我理解,对于前两个,引号之间的整个字符串将被捕获到第一个组中,包括.html)(如果存在)。

有谁知道我怎么能避免这种情况发生?

3 个答案:

答案 0 :(得分:1)

作为旁边的答案,jsoup在处理html时是一个非常好的API。

使用jsoup:

Document doc = Jsoup.parse(html);
for(Element link : doc.select("a")) {
    String linkHref = link.attr("href");
    if(linkHref.endsWith(".htm") || linkHref.endsWith(".html")) {
        // do something
    }
}

答案 1 :(得分:1)

试试这个.*\.(?!(htm|html)$)

任何数字中的任何字符。*后跟一个点。没有跟着htm,htmt(?!...)

答案 2 :(得分:1)

您可以重新排列表达式,并在捕获之前将负向前移:

href\s*[=]\s*"(?!.+?[.]htm[l]?")(.+?)"

Here是一个演示。