参考地址:https://www.cjavapy.com/article/68/
java 中正则表达式匹配多行Pattern.MULTILINE 和Pattern.DOTALL模式
本文介绍java中正则表达式怎么样匹配换行符\r\n 从而实现多行匹配,
1. Pattern.MULTILINE模式的用法
正则表达式中出现^ $在默认的情况下只会匹配第一行,设置了MULTILINE模式回匹配所有行。
Pattern p1 = Pattern.compile("^.*b.*$"); //输出false,因为正则表达式中出现了^或$,默认只会匹配第一行,第二行的b匹配不到。 System.out.println(p1.matcher("a\nb").find()); Pattern p2 = Pattern.compile("^.*b.*$",Pattern.MULTILINE); //输出true,指定了Pattern.MULTILINE模式,就可以匹配多行了。 System.out.println(p2.matcher("a\nb").find());
2.Pattern.DOTAL模式的用法
在默认的情况下(.)不会匹配换行符,设置了Pattern.DOTALL模式,才会匹配所有字符包括换行符
Pattern p1 = Pattern.compile("a.*b"); //输出false,默认点(.)没有匹配换行符 System.out.println(p1.matcher("a\nb").find()); Pattern p2 = Pattern.compile("a.*b", Pattern.DOTALL); //输出true,指定Pattern.DOTALL模式,可以匹配换行符。 System.out.println(p2.matcher("a\nb").find());
3. 同时使用Pattern.MULTILINE和Pattern.DOTALL
实际的情况中要比较复杂。
Pattern p1 = Pattern.compile("^a.*b$"); //输出false System.out.println(p1.matcher("cc\na\nb").find()); Pattern p2 = Pattern.compile("^a.*b$", Pattern.DOTALL); //输出false,因为有^或&没有匹配到下一行 System.out.println(p2.matcher("cc\na\nb").find()); Pattern p3 = Pattern.compile("^a.*b$", Pattern.MULTILINE); //输出false,匹配到下一行,但.没有匹配换行符 System.out.println(p3.matcher("cc\na\nb").find()); //指定多个模式,中间用|隔开 Pattern p4 = Pattern.compile("^a.*b$", Pattern.DOTALL|Pattern.MULTILINE); //输出true System.out.println(p4.matcher("cc\na\nb").find());