2014-10-01 104 views
0

我正在使用正則表達式解析Java中的HTML文件,並且我想知道如何匹配所有href =」「元素做的而不是結束在.htm.html,並且,如果匹配,捕捉引號之間的內容爲一組Java:匹配不以.htm結尾的所有字符串「

這是到目前爲止,我已經試過的:

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

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

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

據我所知,與前兩個,引號之間的整個字符串正被捕獲爲第一組,包括.html),如果它是存在的。

有誰知道我可以如何避免這種情況發生?

+0

是否要捕獲htm和html文件? – Pracede 2014-10-01 20:44:54

回答

1

您只需重新表達,並捕獲之前移動負先行到:

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

Here是一個演示。

1

作爲一個答案,jsoup是一個非常好的API處理html。

使用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 
    } 
} 
+0

不幸的是,這是一個學校任務,我不允許使用任何這樣的圖書館! :-( – 2014-10-01 20:45:36

+1

我明白了,正如我所說的那樣,這只是一個記錄的答案:)祝你的作業順利。 – 2014-10-01 20:46:15

1

試試這個.*\.(?!(htm|html)$)

在任何數量的任何字符*後跟一個點。後面沒有HTM,HTMT(...?!)

相關問題