我正在尝试从具有以下标记的网页中提取
<div id="div">
content
content
content
content
</div>
我目前的正则表达式是
Pattern div = Pattern.compile("<div id=\"div\">(.*?)</div>");
当只有一行但是使用新行时,它无法识别div标签内的东西。
任何帮助都会很感激(我顺便使用java)
答案 0 :(得分:4)
就个人而言,我强烈反对在这种情况下使用正则表达式。尝试使用正则表达式从HTML文档中提取信息,well documented为bad 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运算符
希望这有帮助