java正则表达式!正则表达式踩坑!!!

来源:互联网 发布:南阳网络推广哪家好 编辑:程序博客网 时间:2024/06/02 16:10

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



原创粉丝点击