天天看點

Java正規表達式

版權聲明:本文為部落客原創文章,轉載請注明出處。 https://blog.csdn.net/twilight_karl/article/details/53994857

Parrern類

沒有構造函數,使用一下方法建立對象:

Pattern compile(String regex) 将給定的正規表達式編譯到模式中。

Pattern compile(String regex, int flags) 将給定的正規表達式編譯到具有給定标志的模式中。

一些方法:

int flags() 傳回此模式的比對标志。

Matcher matcher(CharSequence input) 建立比對給定輸入與此模式的比對器。

matches(String regex, CharSequence input) 編譯給定正規表達式并嘗試将給定輸入與其比對。

pattern() 傳回在其中編譯過此模式的正規表達式。

String[] split(CharSequence input) 圍繞此模式的比對拆分給定輸入序列。

String[] split(CharSequence input, int limit) 圍繞此模式的比對拆分給定輸入序列。

String toString() 傳回此模式的字元串表示形式。

典型的調用順序是 :

Pattern p = Pattern.compile(“a*b”);

Matcher m = p.matcher(“aaaaab”);

boolean b = m.matches();

也可直接這樣調用,功能相同:

boolean b = Pattern.matches(“a*b”, “aaaaab”);

例:

//判斷是否滿足表達式
public class testMain2 {
    public static void main(String[] args) {
        String regex="a\\d{3}b";
        String input="a111b";
        //建立Pattern對象
        Pattern p = Pattern.compile(regex);
        //建立Matcher對象
        Matcher matcher= p.matcher(input);
        //使用Matcher中的方法
        boolean flag = matcher.matches();
        System.out.println(flag);
    }
}           

Matcher類

find() 該方法掃面輸入的序列查找與該模式比對的下一個子序列

group() 傳回找到的内容。group()group(0)表示比對整個表達式的子字元串

String group(int group) 傳回在以前比對操作期間由給定組捕獲的輸入子序列。

替換(不改變原字元串):

String replaceAll(String replacement) 替換模式與給定替換字元串相比對的輸入序列的每個子序列。

String replaceFirst(String replacement) 替換模式與給定替換字元串比對的輸入序列的第一個子序列。

分割:

split(String str) 按str分割(str可以為正規表達式)

(String類中的方法)

可循環使用find和group進而将所有滿足情況的子字元串輸出:

public class testMain2 {
    public static void main(String[] args) {
        String regex="a\\db";
        String input="a1ba2ba3ba4ba5b";
        Pattern p = Pattern.compile(regex);
        Matcher matcher= p.matcher(input);
        while(matcher.find()){
            System.out.println(matcher.group());
        }
    }
}           

結果:

a1b

a2b

a3b

a4b

a5b

可以使用split(String str)将字元串分割成字元數組,以str作為分隔符:

String [] s = input.split("\\d+");
        for(String temp : s){
            System.out.println(temp);
        }           

a

ba

b