一.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.