Java規則表達式

規則表示式的使用

可以參考 java.util.regex.Pattern

1、字面意義字符

字母或數字         比較字母或數字
\\                      比較\
\0n                   八進制0n字符(0<= n>= 7 )
\0n                   八進制0nn字符(0<= n>= 7 )
\0mnn              八進制0mnn字符(0<= n>= 7, 0<= m <=3 )
\xhh                 十六進制0xhh字符
\uhhhh             十六進制0xhhh字符
\x{h...h}             十六進制0xh...h字符
\t                      Tab(\u0009)
\n                      換行(\u000A)
\r                       返回(\u000D)
\f                       換頁(\u000C)
\a                      響鈴(\u0007)
\e                      ESC(\u001B)
\cx                    控制字符x

一些特殊符號
! $ ^ * ( ) + = { } [ ] | \ : . ? 等

2、字符類
[abc]                     a或b或c任一字符
[^abc]                   a、b、c以外的任意字符
[a-zA-Z]                a到z或A~Z任一字符 
[a-d[m-p]]             a到d或m~p任一字符,等於[a-dm-p]
[a-z&&[def]]         a到z而且是d、e、f的任一字符,等於[def]
[a-z&&[^bc]]        a到z而且不是b或c的任一字符,等於[ad-z]
[a-z&&[^m-p]]     a到z而且不是m到p的任一字符,等於[a-lq-z]
預定義字符
.                           任一字符
\d                        比較任一數字,即[0-9]
\D                        比較任一非數字字符,即[^0-9]
\s                         比較任一空格字符,即[\t\n\x0B\f\r]
\S                        比較任一非空格字符,即[^\s]
\w                       比較任一ASCLL字符,即[a-zA-Z0-9]
\W                      比較任一非ASCLL字符,即[^\w]   

3、貪婪、逐步、獨吞量詞
貪婪量詞
X?                    X項目出現一次或沒有
X*                    X項目出現零次或多次
X+                   X項目出現一次或多次
X{n}                 X項目出現n次
X{n,}                X項目至少出現n次
X{n,m}             X項目出現n次但不超過m次

貪婪量詞:當比較器看到貪婪量詞的時候,比較量詞會把剩餘的文字整個吃掉,再逐步吐出文字,
				看看是否符合量詞後的規則表達式。如果吐出部分符合,而能吃下部分也符合貪婪
				量詞就比較成功,結果就是貪婪量詞會儘可能的找出長度最長的符合文字。
逐步量詞:在貪婪量詞表示法後面加上?,就成爲了逐步量詞,比較器看到逐步量詞時,會一邊
				吃掉剩餘的文字,一邊看看吃下的文字是否符合規則表達式。
獨吞量詞:在貪婪量詞後面加上+,就成爲了獨吞量詞,比較器看到獨吞量詞時,會先將剩餘的文
				字吃掉,然後看看獨吞量詞部分是否符合吃下的文字,如果符合就不會再吐出來了。

以xfooxxxxxxfoo爲例
規則表示式           符合的結果
.*                         xfooxxxxxxfoo
.*?                       xfoo和xxxxxxfoo
.*+                      無

4、邊界比較(\b標註邊界)
如:\bdog\b  則以dog這個單詞爲分割
常用的一些比較
^                                     一行開頭
$                                      一行結尾
\b                                    單詞邊界
\B                                    非單詞邊界
\A                                    輸入開頭
\G                                    前一個符合項目結尾
\Z                                    非最後終端機的輸入結尾
\z                                    輸入結尾

5、分組與參考
例如郵箱:  ^[a-zA-Z]+\d*@([a-zA-Z0-9]+\.)+com
回頭參考:規則表達式 ((A)(B(C)))有四個分組(按左括號的個數來分)
1、( (A) ( B (C) ) )
2、(A)
3、(B ( C) )
4、(C)
例:\d\d要比較兩個數字,(\d\d)\1則是要比較四個數字,1212會符合,而1234則不符合.
例:["'][^"']*["']兩邊的部分爲單引號或雙引號,但並沒有說如果前面的是單引號後面的就必須是
	  單引號 。
	  (["']) ["']*\1則兩邊的符號必須一致
 
 另外比較重要的兩個實例
 java.util.regex.Pattern
 java.util.regex.Matcher


例子:

package useGuiZeBiaoDaShi;

public class useGuiZeBiaoDaShi {
	static String[] token = null;
	static String strings;
	
	public static void main(String [] args){
		//根據逗號切割
		useGuiZeBiaoDaShi u = new useGuiZeBiaoDaShi();
		strings = "Sun,Fei,Long";
		System.out.println("根據逗號分隔"+strings);
		token = strings.split(",");
		u.outPut(token);
		//根據Tab分割
		strings = "Sun\tFei\tLong";
		System.out.println("根據\\t分隔"+strings);
		token = strings.split("\\t");
		u.outPut(token);
		//根據+分割
		strings = "Sun+Fei+Long";
		System.out.println("根據+分隔"+strings);
		token = strings.split("\\+");
		u.outPut(token);
		//根據||分割
		strings = "Sun||Fei||Long";
		System.out.println("根據||分隔"+strings);
		token = strings.split("\\|\\|");
		u.outPut(token);
		//根據\分割
		strings = "Sun\\Fei\\Long";
		System.out.println("根據\\分隔"+strings);
		token = strings.split("\\\\");
		u.outPut(token);
		
		
		//測試字符類
		//格局ab分割
		strings = "SunabFeiabLong";
		System.out.println("根據ab分隔"+strings);
		token = strings.split("[a][b]");
		u.outPut(token);
		//根據漢字分割,可以用來驗證字符串是否包含漢字
		strings = "Sun孫Fei飛Long";
		System.out.println("根據漢字分隔"+strings);
		token = strings.split("\\W");
		System.out.println(token.length);
		if(token.length > 1){
			System.out.println("包含漢字");
		}
		u.outPut(token);
		
		
		
		//貪婪,逐步,獨吞量詞
		String [] regexs = {".*foo",".*?foo",".*+foo"};
		for(String regex: regexs){
			System.out.println("xfooxxxxxxfoo".replaceAll(regex, "Orz"));
		}
		
		//日期的格式驗證
		//---/d/d/d/d-/d/d/d/d/d/d
		String date = "1111-111111";
		System.out.println("根據/d/d/d/d-/d/d/d/d/d/d分割"+date);
		token = date.split("\\d{4}-\\d{6}");
		System.out.println(token.length);
		if(token.length != 0){
			u.outPut(token);
		}
		else{
			System.out.println("符合格式!");
		}
		

	}//end main
	
	
	//輸出分割後的字符
	public void outPut(String [] token){
		for(String s: token){
			System.out.println(s);
		}
	}//end ourPut
	
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章