java正則表達式及java.util.regex包的學習

參考http://www.cnblogs.com/deerchao/archive/2006/08/24/zhengzhe30fengzhongjiaocheng.htmlhtml

  1. package sunfa.lx;  
  2.   
  3. import java.util.Arrays;  
  4. import java.util.regex.Pattern;  
  5.   
  6. /** 
  7.  * java.util.regex包負責對字符序列進行正則表達式匹配 
  8.  * Pattern負責編譯 
  9.  * Matcher負責匹配 
  10.  * --------------- 
  11.  * 正則表達式: 
  12.  *一、元字符 比如char,牢牢表明一個字符; 
  13.  *二、某些字符,好比\、.、*等這樣的字符在正則表達式中已經被做爲標記使用了,若是你想做爲非元字符使用的話就得進行轉義,轉義的方法是在這些字符前面加\, 
  14.  * 好比\就變成\\,.就成爲\. 
  15.  *三、重複的元字符有:*,+,?,{n},{n,},{n,m},這個標記是用來修飾它前面的那個字符的。 
  16.  *四、字符類,或稱爲分組[],好比[0-9],[0-9A-Za-z]用-表示範圍 
  17.  */  
  18. public class PatternDemo1 {  
  19.     public static void main(String[] args) {  
  20.         /**一、元字符的[]*/  
  21.         //[]屬於元字符系列,所謂元字符簡單的說就是字符,就是一個char,像bc就不是一個char了  
  22. //      method2(new String[]{"abt","act","adt","abct","bt"}, "a[bcd]t");  
  23.         //[]的區間,-的兩頭表明區間,多區間這樣寫,好比[0-9a-zA-Z]  
  24. //      method2(new String[]{"a1t","a3t","a01t","abt","2t"}, "a[0-9]t");  
  25.         //補集用^表示,在二元運算符中這是非的意思,儘管用了^,at仍是不能經過,因此元字符[]必須有且僅有一個字符  
  26. //      method2(new String[]{"a0t","a2t","abt","at"}, "a[^0246]t");  
  27.           
  28.         /**二、元字符的? + * */  
  29.         //?的目標是它前面的一個字符,元字符?表示它前面的一個字符出現0次或1次  
  30. //      method2(new String[]{"","a","aa","at","a1t"}, "a?");  
  31.         //元字符+的目標是它前面的一個字符,它表示它前面的那個字符出現1次或屢次  
  32. //      method2(new String[]{"","a","aa","aaaaa","at","a1t"}, "a+");  
  33.         //元字符*的目標是它前面的一個字符,它表示它前面那個字符出現0次或屢次,*能夠說是?和+的並集  
  34. //      method2(new String[]{"","a","aa","aaaaa","at","a1t"}, "a*");  
  35.           
  36.         /** .元字符能匹配任何字符(換行\r除外),因此用.*能夠匹配換行外的任何字符串  */  
  37. //      method2(new String[]{"","a","aa","aaaaa","at","a1t","\t","\r","n"}, ".");  
  38. //      method2(new String[]{"","a","aa","aaaaa","at","a1t","\t","\r","n"}, ".*");  
  39.           
  40.         /** 數量{n},{n,},{n,m}*/  
  41.         //{n}表示它前面的字符重複n次,而且只重複n次,重複n-1次或n+1次都是不能夠的  
  42. //      method2(new String[]{"","a","aa","aaaaa","at","a1t"}, "a{2}");  
  43.         //{n,}是對{n}的擴展,表示重複n次(包含n次)以上  
  44. //      method2(new String[]{"","a","aa","aaaaa","at","a1t"}, "a{2,}");  
  45.         //{n,m}表示數目在n到m範圍內,包含兩頭  
  46. //      method2(new String[]{"","a","aa","aaa","aaaa","aaaaa","at"}, "a{2,4}");  
  47. //      method2(new String[]{"12345-1234","12345"}, "\\d{5}-\\d{4}|\\d{5}");  
  48.         //  
  49. //      method2(new String[]{"12345-123","12345"}, "\\d{5}|\\d{5}-\\d{4}");  
  50. //      method2(new String[]{"211","12345"}, "2[0-4]\\d");  
  51. //      method2(new String[]{"1","12345"}, "[01]?\\d\\d?");  
  52.         method2(new String[]{"1","12345","12"}, "[0-9]");  
  53.           
  54.     }  
  55.     private static void method2(String[] a,String regex){  
  56.         Pattern p = Pattern.compile(regex);  
  57.         for (int i = 0; i < a.length; i++) {  
  58.             System.out.println(a[i]+","+p.matcher(a[i]).matches());  
  59.         }  
  60.     }  
  61.     private static void method1(){  
  62.         String str = "2011-11-12";  
  63.         String pat = "\\d{4}-\\d{2}-\\d{2}";  
  64.         System.out.println(Pattern.compile(pat).matcher(str).matches());  
  65.           
  66.         String str1 = "a1b22c333d4444e55555f";  
  67.         //按數字來分割  
  68.         String[] str1Arr = Pattern.compile("\\d+").split(str1);  
  69.         System.out.println(Arrays.toString(str1Arr));  
  70.         //數字所有替換成_  
  71.         System.out.println(Pattern.compile("\\d+").matcher(str1).replaceAll("_"));  
  72.         //去除全部的空格  
  73.         System.out.println("\\s去除全部的空格:"+Pattern.compile("\\s").matcher("aa b c d ").replaceAll(""));  
  74.         System.out.println("5-10個字符:"+Pattern.compile(".{5,10}").matcher("12345").matches());  
  75.         System.out.println("多匹配:"+Pattern.compile("\\bhi.*Lucy\\b").matcher("hi後面不遠處跟着一個Lucy").matches());  
  76.         System.out.println("多匹配2:"+Pattern.compile("^\\d{5,12}$").matcher("12345678a").matches());  
  77.           
  78.         //直接調用String類提供的方法更加的方便  
  79.         System.out.println(Arrays.toString(str1.split("\\d+")));  
  80.         System.out.println("2011-11-12".matches("\\d{4}-\\d{2}-\\d{2}"));  
  81.     }  
  82. }  
相關文章
相關標籤/搜索