java正则表达式
java正则表达式
java正则表达式套路:
输出结果为:你好啊!!!String content = "你好<h1>你好啊!!!</h1>啊!!!"; String pattern = "<h1>.*?</h1>"; List<String> list = new ArrayList<String>(); Pattern p = Pattern.compile(pattern); Matcher m = p.matcher(content); while(m.find()){ list.add(m.group()); } for (int i=0; i<list.size(); i++){ get = get + list.get(i); } String result = get.replaceAll("<.*?>", ""); System.out.println(result);
一般来说正常得这个代码套上就行了!!但是,博主作死,拿正则表达式来解析网页发现,为什么我正则表达式没用了!!!!!
没有用了!!!!
输出的结果为空!!!!!!
打个比方:
String content = "<div class=\"post_text\" id=\"endText\" style=\"border-top:1pxsolid #ddd;\">\n" +
" 测试测试测试测试测试测试测试
" 测试测试测试测试测试测试测试
" 测试测试测试测试测试测试测试
" </div>\n"
这段代码套上去,想得到
<div class="post_text" id="endText" style="border-top:1px solid #ddd;">....</div>的内容
结果输出时空。。。。
然后我百度了好久,没有专门得讲解。最后还是去认真看Pattern包。。发现
Pattern.DOTALL
是个好东西。
DOTALL
启用 dotall 模式。
在 dotall 模式中,表达式 .可以匹配任何字符,包括行结束符。默认情况下,此表达式不匹配行结束符。
通过嵌入式标志表达式 (?s) 也可以启用 dotall 模式(s 是"single-line" 模式的助记符,在 Perl 中也使用它)。
也就是这句话
Pattern p = Pattern.compile(pattern,Pattern.DOTALL);
才可以让.*? 进行多行匹配!
转个链接https://www.cnblogs.com/sparkbj/articles/6207103.html