JAVA-正則表達式

Pattern.matches 方法適用於設置尚可接受而且只需進行一次測試的狀況 (整個序列全匹配時才返回true)。java

    boolean b = Pattern.matches("[T|t]rue", "true");System.out.println(b);true[Yy]es[Tt]rue時返回fale,因爲不是整個序列匹配輸入字符串"true"

  1. boolean a = "true".matches("[a-z]{4}");System.out.println(a);true

  2. Pattern pattern = Pattern.compile("[A-Z][a-z]*", Pattern.CASE_INSENSITIVE | Pattern.UNIX_LINES);

  3. split方法使用,分隔字符串正則表達式

  4. Pattern pattern = Pattern.compile(",");String string = "sa,ad,fd,c,we,d,a";String[] strings = pattern.split(string);for (String s : strings) {    System.out.println(s);}

  5. Pattern對象是線程安全的,Matcher類對象是非線程安全的,由於它們在方法調用之間保有內狀態。安全

  6. matcher對象能夠重複使用,因爲matcher非線程安全,因此須要在每次matcher時調用復位器rest()app

  7. Pattern pattern = Pattern.compile("正則表達式");Matcher matcher = pattern.matcher("");String line;BufferedReader reader = new BufferedReader(new FileReader("文件路徑"));while ((line = reader.readLine()) != null) {    //復位器,因爲matcher非線程安全    matcher.reset(line);    if (matcher.find()) {        System.out.println("file == " + line);    }    reader.close();}

  8. Matcher中的matchers()與Pattern.matcher()用法相同,整個字符匹配才true;測試

  9. lookingAt(),匹配開始spa

    lookingAt( )方法與 matches( )類似,可是它不要求整個序列的模式匹配。若是正則表達式 模式匹配字符序列的beginning(開頭),則lookingAt( )返回true。lookingAt( )方法每每從序列 的頭部開始  。該方法的名字暗示了匹配程序正在 查看 目標是否以模式開頭。若是返回 爲true,那麼能夠調用start( )end( )group( )方法匹配的子序列的範圍。線程

  10. find(),循環匹配rest

    find( )方法運行的是與 lookingAt( )相同類型的匹配操做,可是它會記 前一個匹配的位置 並在以後從新開始  。從而容許了相繼調用 find( )對輸入進行逐句比對,尋找 入的匹配。 復位後第一次調用該方法,則  將從輸入序列的首個字符開始。在隨後調用中,它將從前一 個匹配的子序列後面的第一個字符從新開始  。如各個調用來講,若是找到了模式將返回true;反之將返回 false。一般你會使用 find( )循環訪問一些文原本查找其中全部匹配的模式。 code

  11. //find循環匹配,返回開始結束位置,提取子序列		
    if (matcher.find( )) {				
    subseq = input.subSequence (matcher.start(), matcher.end( ));					
    }

  12. start(),end()須要在matches(),lookingAt(),find()調用後纔有意義,匹配空字符串start=end對象

  13. group(),表達示捕獲組,從左至右


  14. String match0 =input.subSequence (matcher.start(), matcher.end()).toString();
    String match2 = input.subSequence (matcher.start (2),matcher.end (2)).toString()					
    //上述代碼與下列代碼等效:	
    //group()無參數,返回組0,即所有匹配項
    String match0 = matcher.group();
    String match2 = matcher.group(2);

  15. replaceFirst(),replaceAll()替換字符

    pattern.complie("[Bb]yte");

    String replace ="$lite";

    matcher.replaceFirst/replaceAll(replace);

  16. java中的轉義字符須要增長兩個反斜槓,\表示爲\\,若是再使用正則來replace則須要再增長\\,最終結過兩次轉換事後\\\\表明一個 \。

  17. appendReplacement()  appendTail()

    appendReplacement() find後,複製查找的內容到新的StringBuffer,而後替換新的StringBuffer中的字符(不會理會原字符串中的未查找到的部份如何處理,只處理查找到的部份);

    appendTail() 恰好相反,複製查找的內容到新的StringBuffer,既處理查找部分字符,一樣處理原字符串的餘下部。份。

  18.     Pattern pattern = Pattern.compile("([Tt])hanks");
        Matcher matcher = pattern.matcher("Thanks, thanks very much");
        StringBuffer sb = new StringBuffer();
        while (matcher.find()) {
            if (matcher.group(1).equals("T")) {
                matcher.appendReplacement(sb, "Thank you");
            } else {
                matcher.appendReplacement(sb, "thank you");
            }
        }
        matcher.appendTail(sb);
    
        System.out.println(sb.toString());
    }
  19. String類已添加的公用正則表達式

    matches,split,relaceFirst,replaceAll

  20. Java正則是佔有型量詞 (possessive quantifier),它們比常規的貪婪量 (greedy quantifier)還要貪婪。佔有型量詞會盡量地多匹配目標。

相關文章
相關標籤/搜索