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