1. 程式人生 > >Java 實際應用中常用的正則表示式

Java 實際應用中常用的正則表示式

1.正則表示式
jdk1.4 開始提供了正則表示式的支援;
java.util.regex
Pattern類:此類物件如果想要獲得必須使用compile(),
此方法的功能式編譯正則
Matcher類:通過Patern類取得;
2.正則標記
 1.所有的正則可以使用的標記都在java.util.regex.Pattern類裡面定義了;
 2. 單個字元 (數量:1)
    字元:表示由一位字元所組成;
    \\  : 轉義字元
    \t  :表示一個'\t'的符號;
    \n  :匹配換行(\n) 符號;
 3.字符集(數量:1)


  [abc] :表示可能是字元a,b,中的任意一位
  [^abc]:表示不是a,b,c中的任意一位
  [a-z]:所有的小寫字母
  [a-zA-Z]:所有的字母
  [0-9]   :任意的一位數字
  4.簡化的字符集表示式(數量:1)
  .  :表示任意一個字元
  \d :等價於[0-9]
  \D :非0-9的字元
   \s :表示任意的空白字元 如'\t','\n'
   \S :表示任意的非空白字元;
   \w :等價於[a-zA-Z0-9_] 表示由任意的字母,數字,-,組成
   \W :表示[^a-zA-Z0-9_]
   5.邊界匹配(不要再java中使用,再javaScript中使用)

   ^:正則開始
   $:正則結束
   6.數量表達式
    正則?:表示此正則可以出現0次或1次
    正則+:表示此正則可以出現1次或1次以上;
    
    正則{n}:表示此正則可以出現n次
    正則{n,}:表示此正則出現n次以上(包含n次)
    正則{n,m}:表示此正則出現n次到m次
    
    7.正則1正則2
:正則1判斷完成後繼續判斷正則2
       正則1|正則2 :正則1或正則2有一種滿足則可
       (正則) 將多個正則作為一組,可以為這一組單獨設定出先的次數
    
   String類對正則的支援
   jdk1.4 引入了正則的支援,Stirng類也添加了相應的支援
   matches(String regex) 正則驗證,使用指定的字串判斷其是否滿足給定的正則表示式的結構;
   replaceAll(String regx,String replacement)全部替換
   replaceFirst(String regx,String replacement)替換首個
   split(String regex)全部拆分;
   split(String regex,int limit) 部分拆分;
   
   

//將所有的非小寫字母替換為"";
	String str="88drrrrr*RRE*&(33lslfWWWWabckdd";
	String pattern="[^a-z]";
	String replaceAll = str.replaceAll(pattern, "");
	System.out.println(replaceAll);//drrrrrlslfabckdd
	
	//根據數字拆分字母
	String str1="aaa55bb8888cc444444uuuuu55555uuKKKK";
	String pattern1="\\d+";
	String[] split = str1.split(pattern1);
	for (String string : split) {
		System.out.println(string);
	}
	//驗證一個字串是否式數字,如果是轉為double
	String 	str3="1";
	String pattern3="\\d+(\\.\\d+)?";
	System.out.println(str3.matches(pattern3));
	//判斷給定的字串是不是一個ip地址 192.168.1.1 每一段最大長度是3
	String str4="192.168.1.1";
	String pattern4= "(\\d{1,3}\\.){3}\\d{1,3}";
	System.out.println(str4.matches(pattern4));
	
	//email
	/* 使用者名稱由字母、數字、字母、下劃線、點組成
	 使用者名稱 必須以字母開頭 可以以數字和字母結尾
	 長度不能超過30位
	 最後的根域名只能是.com ,.cn ,.net,.com.cn,.edu,.gov,.org*/
	String email="[email protected]";
	//開頭[a-zA-Z]
	//中間段[a-zA-Z0-9_\\.]{0,28}
	//結尾[a-zA-Z0-9]
	//@
	//緊跟@後面的e \\w+
	// \\.
	//(net|cn|com|com\\.cn|net\\.cn|edu|gov|org)
	String pattern_email="[a-zA-Z][a-zA-Z0-9_\\\\.]{0,28}[a-zA-Z0-9]@\\w+\\.(net|cn|com|com\\\\.cn|net\\\\.cn|edu|gov|org)";
	System.out.println(email.matches(email));
	
	
	//字串拆分
	String str_split="aa3333ddddd333ddlll33ll3";
	String reg="\\d+";
	Pattern compile = Pattern.compile(reg);
	String[] split2 = compile.split(str_split);
	System.out.println(Arrays.toString(split2));
	//字串驗證
	String str6="323237";
	String reg6="\\d+";
	Pattern p = Pattern.compile(reg);//編譯正則
	Matcher matcher = p.matcher(str6);//進行正則匹配
	System.out.println(matcher.matches());//匹配的結果
	//String類本身支援了這兩種操作,所有對String而言很少再去利用Pattern和Matcher類這兩個類進行操作;
	//可以實現程式碼的最小化


    

//正則表示式
	 // java中'\'本身具有轉義意義;如果要輸出'\' 需要使用'\\'
	  // System.out.println("a\nb\\");
     String input1="hello ";
	 String pattern1="hello.";//.匹配任何一個字元  (hello後必須有一位)
	 //.(點)匹配除"\r\n"之外的任何單個字元;
	 System.out.println(Pattern.matches(pattern1, input1));

	 //手機號碼(第一位是1,第二位是3,4,5,7,8,第三位則是0-9,第三位之後則是數字0-9)
	 String input2="17673195654";
	 String pattern2="^1(3|4|5|7|9)\\d{9}";
	 //  x|y 匹配x或y
	 //  ()圓括號表示分一組組
	 //  {}花括號表示出現的次數 ; +表示一個或多個; *表示零個或多個;?表示零個或一個;
	 //  {n} 表示匹配n次;{n,}至少匹配n次;{m,n}匹配至少m次,最多n次
	 // \\d數字字元匹配。等效於 [0-9]。
	 // '\\' 在java中'\'本身具有轉義意義;如果要輸出'\' 需要使用'\\'
	 //  '^'配輸入字串開始的位置
	 System.out.println(Pattern.matches(pattern2, input2));

	 //郵箱
	 //26個大小寫英文字母表示為a-zA-Z
	// 數字表示為0-9
	 //下劃線表示為_
	 //中劃線表示為-
	// 由於名稱是由若干個字母、數字、下劃線和中劃線組成,所以需要用到+表示多次出現
	 String input3="[email protected]";
	 String pattern3="^[a-zA-Z0-9_-][email protected][a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]+$";
	 System.out.println(Pattern.matches(pattern3, input3));
	 // [] 字元組/字符集
	  // \\. 匹配點
	 
	 //兩位正整數
	 String input4="1";
	 String pattern4="^\\d{1,2}$";
	 System.out.println(Pattern.matches(pattern4, input4));

	 //數字 :大於等於0的數(整數和小數(保留兩位))
	 String pattern5="^\\d+(\\.\\d{2}+)?$";
	 String input5="1.44";
	 System.out.println(Pattern.matches(pattern5, input5));

	 //數字(整數、負數、小數(保留兩位小數))
	 String input6="-10.98";
	 String pattern6="^(\\-|\\+)?\\d+(\\.\\d{2}+)?$";
	 System.out.println(Pattern.matches(pattern6, input6));

	 //數字1-99之間的包含1和99的數
	 String input7="99";
	 String pattern7="^[1-9][0-9]?$";
	 System.out.println(Pattern.matches(pattern7, input7));