正则表达式从div内部提取内容

时间:2012-01-18 22:14:14

标签: java html regex

我正在尝试从具有以下标记的网页中提取

<div id="div">
    content
    content
    content
    content
</div>

我目前的正则表达式是

Pattern div = Pattern.compile("<div id=\"div\">(.*?)</div>");

当只有一行但是使用新行时,它无法识别div标签内的东西。

任何帮助都会很感激(我顺便使用java)

4 个答案:

答案 0 :(得分:4)

就个人而言,我强烈反对在这种情况下使用正则表达式。尝试使用正则表达式从HTML文档中提取信息,well documentedbad idea。请改为查看proper HTML parser

答案 1 :(得分:1)

我认为,这应该有效(你需要添加DOTALL修饰符):

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

答案 2 :(得分:1)

当存在换行符时它不起作用的事实是因为.(DOT)与任何类型的换行符都不匹配。要让.匹配换行符,请执行以下操作:

Pattern.compile("<div id=\"div\">(.*?)</div>", Pattern.DOTALL)

或:

Pattern.compile("<div id=\"div\">([\\s\\S]*?)</div>")

或:

Pattern.compile("(?s)<div id=\"div\">(.*?)</div>")

请参阅:http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html#DOTALL

答案 3 :(得分:-1)

您可以添加Pattern.Multiline选项

Pattern div = Pattern.compile("<div id=\"div\">(.*?)</div>", Pattern.MULTILINE);

或在你的reg ex(最后)添加?m运算符

希望这有帮助