參考地址: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());