天天看點

Java正規表達式詳解(Pattern類和Matcher類)一.Pattern類二.Matcher類三 .補充四.注意

一.Pattern類

(import java.util.regex.Pattern)

通過Pattern.complie(String regex)簡單工廠方法建立一個正規表達式(PS:它的構造方法是私有的,不可以直接建立)

Pattern p = Pattern.compile("java*");
        p.pattern();// 傳回java* ,傳回的既是正則字元串.
           

1.Pattern.split(CharSequence arg0).

用于分隔字元串,并傳回一個String[]

Pattern p =Pattern.compile("\\d+"); 
        String[] str=p.split("a 1 player 2 or 3 nothing"); 
           

2.Pattern.matcher(String regex,CharSequence input)

該方法是個靜态方法,用于快速比對字元串,該方法适合用于隻比對一次,且比對全部字元串.

Pattern.matches("\\d+", "111");// 傳回true
        Pattern.matches("\\d+", "111a");// 傳回false,需要比對到所有字元串才能傳回true,這裡a不能比對到
           

二.Matcher類

(import java.util.regex.Matcher)

構造方法也是私有的,不能直接建立,隻能通過Pattern.matcher(CharSequence input)方法得到該類的執行個體

1.Pattern.matcher(CharSequence input)

Pattern p = Pattern.compile("\\d+");
        Matcher m = p.matcher("22bb23");
        m.pattern();// 傳回\d+
           

2.Matcher.matches()/ Matcher.lookingAt()/ Matcher.find()

// matches():對整個字元串進行比對,隻有整個字元串都比對了才傳回true 
        Pattern pm = Pattern.compile("\\d+");
        Matcher mm = pm.matcher("1111a");
        mm.matches();// 因為a不能被\d+比對,傳回false
        Matcher mm2 = pm.matcher("1111");
        mm2.matches();// 傳回true,因為\d+比對到了整個字元串

        // lookingAt():對前面的字元串進行比對,隻有在最前面比對到才傳回true 
        Pattern pl = Pattern.compile("\\d+");
        Matcher ml = pl.matcher("1111a");
        ml.lookingAt();// 傳回true,因為\d+比對到了前面的1
        Matcher ml2 = pl.matcher("a1111");
        ml2.lookingAt();// 傳回false,因為\d+不能比對前面的a

        // find():對字元串進行比對,比對到的字元串可以在任何位置. 
        Pattern pf = Pattern.compile("\\d+");
        Matcher mf = pf.matcher("1111a");
        mf.find();// 傳回true
        Matcher mf2 = pf.matcher("aaaa");
        mf2.find();// 傳回false
           

三 .補充

Mathcer下的三個方法:start() ,end() ,group()

start():傳回比對到的子字元串在字元串中的索引位置. 
    end():傳回比對到的子字元串的最後一個字元在字元串中的索引位置. 
    group():傳回比對到的子字元串 .

    另外
    groupCount()用于傳回有多少組,自然也給出了相應的按照組檢視的方法,及start(),end(),Group()的重載方法:start(int i),end(int i),group(int i).
           

四.注意

隻有當比對操作成功(成功就是當matches(),lookingAt(),find()其中任意一個方法傳回true時),才可以使用start(),end(),group()三個方法,否則會抛出java.lang.IllegalStateException.