正則表達式進階
通配符^
^表示模式的開始,如^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 + "失敗");
}
}
通配符$
$表示模式的結束,如ia$匹配所有以ia結尾的單詞.
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次或一次外,還可以用{}來指定精確指定出現的次數,X{2,5}表示X最少出現2次,最多出現5次;X{2,}表示X最少出現2次,多則不限;X{5}表示X只精確的出現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)
編譯模式,參數regex表示輸入的正則表達式,flag表示模式類型(Pattern.CASE_INSENSITIVE 表示不區分大小寫)
Matcher match(CharSequence input)
獲取匹配器,input時輸入的待處理的字符串
static boolean matches(String regex, CharSequence input)
快速的匹配調用,直接根據輸入的模式regex匹配input
String[] split(CharSequence input,int limit)
分隔字符串input,limit參數可以限制分隔的次數
模式類型Pattern.CASE_INSENSITIVE
正則表達式默認都是區分大小寫的,使用了Pattern.CASE_INSENSITIVE則不對大小寫進行區分.
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方法示例
注意這里要把復雜的模式寫在前面,否則簡單模式會先匹配上.
String input="職務=GM 薪水=50000 , 姓名=職業經理人 ; 性別=男 年齡=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()
對整個輸入字符串進行模式匹配.
boolean lookingAt()
從輸入字符串的開始處進行模式匹配
boolean find(int start)
從start處開始匹配模式
int groupCount()
返回匹配后的分組數目
String replaceAll(String replacement)
用給定的replacement全部替代匹配的部分
String repalceFirst(String replacement)
用給定的replacement替代第一次匹配的部分
Matcher appendReplacement(StringBuffer sb,String replacement)
根據模式用replacement替換相應內容,并將匹配的結果添加到sb當前位置之后
StringBuffer appendTail(StringBuffer sb)
將輸入序列中匹配之后的末尾字串添加到sb當前位置之后.
匹配示例一: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));
}
替換實例一:將單詞和數字部分的單詞換成大寫
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());
posted on 2008-02-21 20:20 和風細雨 閱讀(554) 評論(0) 編輯 收藏 所屬分類: 正則表達式