2016-11-17 72 views
0

以下代碼不會打印任何內容。我究竟做錯了什麼? Regexp測試人員myregexp說正則表達式是正確的。爲什麼我的正則表達式不工作?

page = "<div id=\"foo\" class=\"foo\" style=\"background-image: url(foo.jpg); width: 320px; height: 245px\">\n" + 
        " <a href=\"foo\" onclick=\"return bar('foo', 'foo', {foo: bar, foo: bar}, foo)\"></a>\n" + 
        "</div>"; 

Pattern pattern = Pattern.compile("<div.*?</div>"); 
Matcher matcher = pattern.matcher(page); 
while (matcher.find()) { 
    System.out.println(matcher.start() + " " + matcher.end()); 
} 
+1

考慮使用jsoup解析html:https://jsoup.org/ –

+8

[不要使用正則表達式解析HTML](http://stackoverflow.com/questions/1732348/regex-match-open-tags-except -xhtml-self-contained-tags),這並不是工作的正確工具。至於你的問題,它可能不起作用,因爲它是多行。 – alfasin

+0

感謝您的諮詢。我已經在使用jsoup,但是我的輸入html有一些不正確的結構,所以jsoup也不起作用。 –

回答

1

缺省情況下,正則表達式中的.與換行符不匹配。這意味着你的正則表達式不能匹配</div>,因爲它之前的換行符不匹配.

你應該更換你的編譯行:

Pattern pattern = Pattern.compile("<div.*?</div>",Pattern.DOTALL); 

但正如有人指出的意見,除了在你有過HTML的結構控制簡單的情況下(沒有意見,沒有JavaScript等),你應該使用像JSoup這樣的HTML解析器解析HTML,而不是使用正則表達式。

+0

感謝您的簡單回答。 –

相關問題