2016-11-17 6 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

htmlの解析にjsoupを使用することを検討してください。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

簡単な答えをありがとう。 –

関連する問題