以下代码什么都不打印。我究竟做错了什么? 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());
}
答案 0 :(得分:1)
默认情况下,正则表达式中的.
与换行符不匹配。这意味着您的正则表达式与</div>
不匹配,因为它之前的换行符与.
不匹配。
您应该用以下代码替换编译行:
Pattern pattern = Pattern.compile("<div.*?</div>",Pattern.DOTALL);
但是正如评论中所指出的那样,除了你可以控制HTML结构(没有注释,没有Javascript等)的简单情况之外,你应该使用像JSoup这样的HTML解析器来解析HTML,而不是使用正则表达式。