我喜欢使用正则表达式获取html内容。当内容以多行写入时,我遇到了问题。找不到匹配项。这是我使用的正则表达式:
String regExpContent = "<div class=\"views-field views-field-body\">(\\s+)<span class=\"field-content\">([\\:\\,\\w\\s\\.\\„\\”\\-\\(\\)0123456789( )(\r?\n)]+)</span>(\\s+)</div>";
Pattern regExpMatcherContent = Pattern.compile(regExpContent,
Pattern.DOTALL | Pattern.UNICODE_CHARACTER_CLASS);
我使用(\r?\n)
来匹配新行。有人能帮助我吗?
答案 0 :(得分:1)
请使用HTML parser。
String html = "<div class=\"views-field views-field-body\">...</div>";
Document doc = Jsoup.parseBodyFragment(html);
Element body = doc.body();
Elements fieldContent = body.select("div.views-field-body span.field-content");
我们不鼓励使用正则表达式来解析HMTL,因此我不会重复这里的任何论点。我只想说你真的不应该这样做。
答案 1 :(得分:0)
问题是您正在使用正则表达式来解析html。您应该使用html parser。
回答你的问题
您的Pattern.DOTALL
是多余的,因为您未在正则表达式中的任何位置使用.
\s
会匹配换行符,因为它类似于[\r\n\t ]
问题在于您的[\\:\\,\\w\\s\\.\\„\\”\\-\\(\\)0123456789( )(\r?\n)]+
..它应([:,\\w\\s.„”()-]| )+