[Android基礎]Pattern與Matcher

NO IMAGE

原文連結:http://blog.csdn.net/cclovett/article/details/12448843

import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test 
{	
public static void main(String[] args) 
{	
//pattern()返回正規表示式的字串形式
//輸出:\w 
Pattern p1 = Pattern.compile("\\w ");	
System.out.println(p1.pattern());
//split(CharSequence input)分隔字串
//輸出:s[0]=qq是   s[1]=電話是
Pattern p2 = Pattern.compile("\\d ");
String[] s = p2.split("qq是123電話是456");
for (int i = 0; i < s.length; i  ) {
System.out.println(s[i]);
}
//matcher(String regex,CharSequence input)只匹配一次,且匹配全部字串
System.out.println(Pattern.matches("\\d ", "123"));//true
System.out.println(Pattern.matches("\\d ", "123啊"));//false
//matcher.pattern()返回該Matcher物件是由哪個Pattern物件的建立的
//輸出:\d 
Pattern p3 = Pattern.compile("\\d ");
Matcher m3 = p3.matcher("123");
System.out.println(m3.pattern().pattern());
/////////////////Matcher的三種匹配方式
//Matcher.matches()/ Matcher.lookingAt()/ Matcher.find()
//matches()對整個字串進行匹配,只有整個字串都匹配了才返回true
Pattern p4 = Pattern.compile("\\d ");
Matcher m4 = p4.matcher("123abc");
System.out.println(m4.matches());//false
Matcher m42 = p4.matcher("123");
System.out.println(m42.matches());//true
//lookingAt()對前面的字串進行匹配,只有匹配到的字串在最前面才返回true
Pattern p5 = Pattern.compile("\\d ");
Matcher m5 = p5.matcher("123abc");
System.out.println(m5.lookingAt());//true
Matcher m52 = p5.matcher("abc123");
System.out.println(m52.lookingAt());//false
//find()對字串進行匹配,匹配到的字串可以在任何位置
Pattern p6 = Pattern.compile("\\d "); 
Matcher m6 = p6.matcher("11aa"); 
System.out.println(m6.find());//true
Matcher m62 = p6.matcher("aa11"); 
System.out.println(m62.find());//true
Matcher m63 = p6.matcher("aa"); 
System.out.println(m63.find());//false
//當使用matches(),lookingAt(),find()執行匹配操作後,就可以利用以上三個方法得到更詳細的資訊. 
//start()返回匹配到的子字串在字串中的索引位置. 
//end()返回匹配到的子字串的最後一個字元在字串中的索引位置. 
//group()返回匹配到的子字串
Pattern p7 = Pattern.compile("\\d "); 
Matcher m7 = p7.matcher("aaa123bbb"); 
System.out.println(m7.find());//true
System.out.println(m7.start());//3
System.out.println(m7.end());//6 (是123的後一位)
System.out.println(m7.group());//123
//start(),end(),group()均有一個過載方法它們是start(int i),end(int i),group(int i)專用於分組操作
//Mathcer類還有一個groupCount()用於返回有多少組
Pattern p8 = Pattern.compile("([a-z] )(\\d )"); 
Matcher m8 = p8.matcher("aaa123bbb"); 
System.out.println(m8.find());//true
System.out.println(m8.groupCount());//2
System.out.println(m8.group(1));//aaa
System.out.println(m8.group(2));//123		
System.out.println(m8.start(1));//0
System.out.println(m8.end(1));//3 
System.out.println(m8.start(2));//3
System.out.println(m8.end(2));//6 
Pattern p9 = Pattern.compile("\\d "); 
Matcher m9 = p9.matcher("我的QQ是:12 我的電話是:34 我的郵箱是:[email protected]"); 
while(m9.find()) {
//每次執行匹配操作後start(),end(),group()三個方法的值都會改變,改變成匹配到的子字串的資訊,
//以及它們的過載方法,也會改變成相應的資訊
//只有當匹配操作成功,才可以使用start(),end(),group()三個方法,否則會丟擲java.lang.IllegalStateException,
//也就是當matches(),lookingAt(),find()其中任意一個方法返回true時,才可以使用
//12 34 56
System.out.println(m9.group());
System.out.println(m9.start());
System.out.println(m9.end());
}
}
}