通配符^
^表示模式的開始,如^he匹配所有以he開頭的字符串.
例程:
String[] dataArr = { "he", "hero", "here", "hitler"};
for (String str : dataArr) {
String patternStr = "(^he)(\\w*)";
boolean result = Pattern.matches(patternStr, str);
if (result) {
System.out.println("字符串" + str + "匹配模式" + patternStr + "成功");
} else {
System.out.println("字符串" + str + "匹配模式" + patternStr + "失敗");
}
}
通配符$
$表示模式的結(jié)束,如ia$匹配所有以ia結(jié)尾的單詞.
String[] dataArr = { "ia", "Asia", "China", "Colonbia","America"};
for (String str : dataArr) {
String patternStr = "(\\w*)(ia$)";
boolean result = Pattern.matches(patternStr, str);
if (result) {
System.out.println("字符串" + str + "匹配模式" + patternStr + "成功");
} else {
System.out.println("字符串" + str + "匹配模式" + patternStr + "失敗");
}
}
通配符{}
除了用+表示一次或多次,*表示0次或多次,?表示0次或一次外,還可以用{}來指定精確指定出現(xiàn)的次數(shù),X{2,5}表示X最少出現(xiàn)2次,最多出現(xiàn)5次;X{2,}表示X最少出現(xiàn)2次,多則不限;X{5}表示X只精確的出現(xiàn)5次.
例程:
String[] dataArr = { "google", "gooogle", "gooooogle", "goooooogle","ggle"};
for (String str : dataArr) {
String patternStr = "g(o{2,5})gle";
boolean result = Pattern.matches(patternStr, str);
if (result) {
System.out.println("字符串" + str + "匹配模式" + patternStr + "成功");
} else {
System.out.println("字符串" + str + "匹配模式" + patternStr + "失敗");
}
}
通配符[]中的-
-表示從..到…,如[a-e]等同于[abcde]
String[] dataArr = { "Tan", "Tbn", "Tcn", "Ton","Twn"};
for (String str : dataArr) {
String regex = "T[a-c]n";
boolean result = Pattern.matches(regex, str);
if (result) {
System.out.println("字符串" + str + "匹配模式" + regex + "成功");
} else {
System.out.println("字符串" + str + "匹配模式" + regex + "失敗");
}
}
Pattern類的方法簡述
方法 |
說明 |
static Pettern compile(String regex,int flag) |
編譯模式,參數(shù)regex表示輸入的正則表達(dá)式,flag表示模式類型(Pattern.CASE_INSENSITIVE 表示不區(qū)分大小寫) |
Matcher match(CharSequence input) |
獲取匹配器,input時輸入的待處理的字符串 |
static boolean matches(String regex, CharSequence input) |
快速的匹配調(diào)用,直接根據(jù)輸入的模式regex匹配input |
String[] split(CharSequence input,int limit) |
分隔字符串input,limit參數(shù)可以限制分隔的次數(shù) |
模式類型Pattern.CASE_INSENSITIVE
正則表達(dá)式默認(rèn)都是區(qū)分大小寫的,使用了Pattern.CASE_INSENSITIVE則不對大小寫進(jìn)行區(qū)分.
String patternStr="ab";
Pattern pattern=Pattern.compile(patternStr, Pattern.CASE_INSENSITIVE);
String[] dataArr = { "ab", "Ab", "AB"};
for (String str : dataArr) {
Matcher matcher=pattern.matcher(str);
if(matcher.find()){
System.out.println("字符串" + str + "匹配模式" + patternStr + "成功");
}
}
Pattern的split方法示例
注意這里要把復(fù)雜的模式寫在前面,否則簡單模式會先匹配上.
String input="職務(wù)=GM 薪水=50000 , 姓名=職業(yè)經(jīng)理人 ; 性別=男 年齡=45 ";
String patternStr="(\\s*,\\s*)|(\\s*;\\s*)|(\\s+)";
Pattern pattern=Pattern.compile(patternStr);
String[] dataArr=pattern.split(input);
for (String str : dataArr) {
System.out.println(str);
}
Matcher類的方法簡述
方法 |
說明 |
boolean matches() |
對整個輸入字符串進(jìn)行模式匹配. |
boolean lookingAt() |
從輸入字符串的開始處進(jìn)行模式匹配 |
boolean find(int start) |
從start處開始匹配模式 |
int groupCount() |
返回匹配后的分組數(shù)目 |
String replaceAll(String replacement) |
用給定的replacement全部替代匹配的部分 |
String repalceFirst(String replacement) |
用給定的replacement替代第一次匹配的部分 |
Matcher appendReplacement(StringBuffer sb,String replacement) |
根據(jù)模式用replacement替換相應(yīng)內(nèi)容,并將匹配的結(jié)果添加到sb當(dāng)前位置之后 |
StringBuffer appendTail(StringBuffer sb) |
將輸入序列中匹配之后的末尾字串添加到sb當(dāng)前位置之后. |
匹配示例一:XML元素文字解析
String regex="<(\\w+)>(\\w+)</\\1>";
Pattern pattern=Pattern.compile(regex);
String input="<name>Bill</name><salary>50000</salary><title>GM</title>";
Matcher matcher=pattern.matcher(input);
while(matcher.find()){
System.out.println(matcher.group(2));
}
替換實例一:將單詞和數(shù)字部分的單詞換成大寫
String regex="([a-zA-Z]+[0-9]+)";
Pattern pattern=Pattern.compile(regex);
String input="age45 salary500000 50000 title";
Matcher matcher=pattern.matcher(input);
StringBuffer sb=new StringBuffer();
while(matcher.find()){
String replacement=matcher.group(1).toUpperCase();
matcher.appendReplacement(sb, replacement);
}
matcher.appendTail(sb);
System.out.println("替換完的字串為"+sb.toString());