944
技術社區[雲棲]
Java常用類庫--正則表達式(Pattern類、Matcher類)
1、認識正則

public class RegexDemo01{
public static void main(String args[]){
String str = "1234567890" ; // 此字符串由數字組成
boolean flag = true ; // 定義一個標記變量
// 要先將字符串拆分成字符數組,之後依次判斷
char c[] = str.toCharArray() ; // 將字符串變為字符數組
for(int i=0;i<c.length;i++){ // 循環依次判斷
if(c[i]<'0'||c[i]>'9'){ // 如果滿足條件,則表示不是數字
flag = false ; // 做個標記
break ; // 程序不再向下繼續執行
}
}
if(flag){
System.out.println("是由數字組成!") ;
}else{
System.out.println("不是由數字組成!") ;
}
}
};
基本思路:就是將字符串拆分,之後一個個的進行比較的驗證,但是這樣比較麻煩,而且現在隻是驗證是否由數字組成,如果更加複雜的呢?
此時,將代碼換成正則表達式,再觀察效果;
import java.util.regex.Pattern ;
public class RegexDemo02{
public static void main(String args[]){
String str = "1234567890" ; // 此字符串由數字組成
if(Pattern.compile("[0-9]+").matcher(str).matches()){ // 使用正則
System.out.println("是由數字組成!") ;
}else{
System.out.println("不是由數字組成!") ;
}
}
};
2、Pattern、Matcher類




以上的正則,如果要想驅動起來,則必須依靠Pattern類和Matcher類。
Pattern主要是表示一個規則的意思,即:正則表達式的規則需要在Pattern類中使用。
Matcher類主要表示使用Pattern指定好的驗證規則。
Pattern主要是表示一個規則的意思,即:正則表達式的規則需要在Pattern類中使用。
Matcher類主要表示使用Pattern指定好的驗證規則。





import java.util.regex.Pattern ;
import java.util.regex.Matcher ;
public class RegexDemo03{
public static void main(String args[]){
String str = "1983-07-27" ; // 指定好一個日期格式的字符串
String pat = "\\d{4}-\\d{2}-\\d{2}" ; // 指定好正則表達式
Pattern p = Pattern.compile(pat) ; // 實例化Pattern類
Matcher m = p.matcher(str) ; // 實例化Matcher類
if(m.matches()){ // 進行驗證的匹配,使用正則
System.out.println("日期格式合法!") ;
}else{
System.out.println("日期格式不合法!") ;
}
}
};
在Pattern類中也可以使用正則進行字符串的拆分功能。
import java.util.regex.Pattern ;
import java.util.regex.Matcher ;
public class RegexDemo04{
public static void main(String args[]){
// 要求將裏麵的字符取出,也就是說按照數字拆分
String str = "A1B22C333D4444E55555F" ; // 指定好一個字符串
String pat = "\\d+" ; // 指定好正則表達式
Pattern p = Pattern.compile(pat) ; // 實例化Pattern類
String s[] = p.split(str) ; // 執行拆分操作
for(int x=0;x<s.length;x++){
System.out.print(s[x] + "\t") ;
}
}
};
還可以使用Matcher類中的字符串替換功能。
範例:將字符串中的全部數字替換成“_”
import java.util.regex.Pattern ;
import java.util.regex.Matcher ;
public class RegexDemo05{
public static void main(String args[]){
// 要求將裏麵的字符取出,也就是說按照數字拆分
String str = "A1B22C333D4444E55555F" ; // 指定好一個字符串
String pat = "\\d+" ; // 指定好正則表達式
Pattern p = Pattern.compile(pat) ; // 實例化Pattern類
Matcher m = p.matcher(str) ; // 實例化Matcher類的對象
String newString = m.replaceAll("_") ;
System.out.println(newString) ;
}
};
3、String類對正則的支持
從之前的操作中,可以發現,很多的代碼除了要求的字符串不同,使用的正則規則不同,基本上就沒有什麼特別的了。
所以在JDK1.4之後,Java對正則進行了一些擴充,在String中開始直接支持正則的操作。
所以在JDK1.4之後,Java對正則進行了一些擴充,在String中開始直接支持正則的操作。

import java.util.regex.Pattern ;
import java.util.regex.Matcher ;
public class RegexDemo06{
public static void main(String args[]){
String str1 = "A1B22C333D4444E55555F".replaceAll("\\d+","_") ;
boolean temp = "1983-07-27".matches("\\d{4}-\\d{2}-\\d{2}") ;
String s[] = "A1B22C333D4444E55555F".split("\\d+") ;
System.out.println("字符串替換操作:" + str1) ;
System.out.println("字符串驗證:" + temp) ;
System.out.print("字符串的拆分:") ;
for(int x=0;x<s.length;x++){
System.out.print(s[x] + "\t") ;
}
}
};
但是,在使用正則的時候有一點是需要特表注意的。
現在,假設有如下的一個字符串的拆分程序:
import java.util.regex.Pattern ;
import java.util.regex.Matcher ;
public class RegexDemo07{
public static void main(String args[]){
String info = "LXH:98|MLDN:90|LI:100" ; // 定義一個字符串
// 拆分的形式:
/*
LXH --> 98
MLDN --> 90
LI --> 100
*/
String s[] = info.split("\\|") ;
System.out.println("字符串的拆分:") ;
for(int x=0;x<s.length;x++){
String s2[] = s[x].split(":") ;
System.out.println(s2[0] + "\t" + s2[1]) ;
}
}
};
如果有時候發現一個字符串無法按照指定的字符拆分的話,則需要使用“\”轉義,轉義的時候兩個“\”表示一個“\”。
4、總結
1、使用正則可以方便的完成字符串的驗證、拆分、替換等複雜功能。
2、在開發中一般會直接使用String類中提供好的正則支持,而往往很少直接使用Pattern類或Matcher類。
3、在一些正則應用的時候,對於一些敏感的字符要進行轉義操作。
2、在開發中一般會直接使用String類中提供好的正則支持,而往往很少直接使用Pattern類或Matcher類。
3、在一些正則應用的時候,對於一些敏感的字符要進行轉義操作。
最後更新:2017-04-03 14:53:53