为什么我的正则表达式不起作用?

时间:2016-11-17 07:28:38

标签: java regex

以下代码什么都不打印。我究竟做错了什么? 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 个答案:

答案 0 :(得分:1)

默认情况下,正则表达式中的.与换行符不匹配。这意味着您的正则表达式与</div>不匹配,因为它之前的换行符与.不匹配。

您应该用以下代码替换编译行:

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

但是正如评论中所指出的那样,除了你可以控制HTML结构(没有注释,没有Javascript等)的简单情况之外,你应该使用像JSoup这样的HTML解析器来解析HTML,而不是使用正则表达式。