正則表達式之Pattern.MULTILINE Pattern.DOTALL


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM