JAVA Pattern regex

  1. 常用正則表達式
    [abc] a、b 或 c(簡單類)
    [^abc] 任何字符,除了 a、b 或 c(否定)
    [a-zA-Z] a到 z 或 A 到 Z,兩頭的字母包括在內(範圍)
    [a-d[m-p]] a到 d 或 m 到 p:[a-dm-p](並集)
    [a-z&&[def]] d、e 或 f(交集)
    [a-z&&[^bc]] a 到 z,除了 b 和 c:[ad-z](減去)
    [a-z&&[^m-p]] a 到 z,而非 m 到 p:[a-lq-z](減去)
    . 任何字符(與行結束符可能匹配也可能不匹配)
    \d 數字:[0-9]
    \D 非數字: [^0-9]
    \s 空白字符:[\t\n\x0B\f\r]
    \S 非空白字符:[^\s]
    \w 單詞字符:[a-zA-Z_0-9]
    \W 非單詞字符:[^\w]
    \p{Lower} 小寫字母字符:[a-z]
    \p{Upper} 大寫字母字符:[A-Z]
    X? X,一次或一次也沒有
    X* X,零次或多次
    X+ X,一次或多次
    X{n} X,恰好 n 次
    X{n,} X,至少 n 次
    X{n,m} X,至少 n 次,但是不超過 m 次

2.貪婪匹配與懶惰匹配
考慮這個表達式:a.*b,它將會匹配最長的以a開始,以b結束的字符串。如果用它來搜索aabab的話,它會匹配整個字符串aabab。這被稱爲貪婪匹配。
 有時,我們更需要懶惰匹配,也就是匹配儘可能少的字符。前面給出的限定符都可以被轉化爲懶惰匹配模式,只要在它後面加上一個問號?。這樣.*?就意味着匹配任意數量的重複,但是在能使整個匹配成功的前提下使用最少的重複。
a.*?b匹配最短的,以a開始,以b結束的字符串。如果把它應用於aabab的話,它會匹配aab和ab。

    public static void main(String[] args) {  
            String str = "西安市(雁塔區)(長安區)";  
            String paternStr = ".*(?=\\()";  
            Pattern pattern = Pattern.compile(paternStr);  
            Matcher matcher = pattern.matcher(str);  
            if (matcher.find()) {  
                System.out.println(matcher.group(0));  
            }  
    }  

上述方法的輸出爲:西安市(雁塔區)

    public static void main(String[] args) {  
            String str = "西安市(雁塔區)(長安區)";  
            String paternStr = ".*?(?=\\()";  
            Pattern pattern = Pattern.compile(paternStr);  
            Matcher matcher = pattern.matcher(str);  
            if (matcher.find()) {  
                System.out.println(matcher.group(0));  
            }  
    }  

上述方法輸出:西安市

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章