這篇文章總結java1.4之後加入的正則表達式,總結他的使用。更多的源代碼請訪問我的github:https://github.com/yangsheng20080808/deepIntoJava
本文分爲3大部分
- 正則表達式的通用定義規則
- 正則表達式定義的例子
- 附加常用的匹配例子
正則表達式的通用定義規則
使用正則表達式我們只要關心一個類即可:java.util.regex.Pattern
摘抄自官方API文檔。
指定爲字符串的正則表達式必須首先被編譯爲此類的實例。然後,可將得到的模式用於創建 Matcher 對象,依照正則表達式,該對象可以與任意字符序列匹配。執行匹配所涉及的所有狀態都駐留在匹配器中,所以多個匹配器可以共享同一模式。
因此,典型的調用順序是
Pattern p = Pattern.compile(“a*b”);
Matcher m = p.matcher(“aaaaab”);
boolean b = m.matches();
在僅使用一次正則表達式時,可以方便地通過此類定義 matches 方法。此方法編譯表達式並在單個調用中將輸入序列與其匹配。
語句 boolean b = Pattern.matches(“a*b”, “aaaaab”);
等效於上面的三個語句,儘管對於重複的匹配而言它效率不高,因爲它不允許重用已編譯的模式。
此類的實例是不可變的,可供多個併發線程安全使用。Matcher 類的實例用於此目的則不安全。
匹配器和分組上一篇文章已經詳細的說明了,這篇文章就不繼續介紹,直接介紹規則和例子。
正則表達式主要用於模式匹配,查看了String類的源代碼,其實String類裏面很多類似字符串分割和匹配的函數內部都是直接調用了Pattern類的方法。類似split方法等:
正則表達式的一些語法規則直接去看api文檔就好。
正則表達式定義的例子
這個部分介紹幾個正則表達式的例子,一篇文章總結了:同一個正則表達式匹配的內容可能是很不一樣的,但是他們都滿足了某一項規則,這個規則就是我們所說的正則表達式所表示的內容。
下面舉一個例子說明:
其中:[A-Z][a-z]([A-Z][a-z])+ 具體的意思是:大寫字母-小寫字母(0個或多個){大寫字母-小寫字母(0個或多個)}(至少一次)
意思就是:至少兩次:大寫-(小寫*)
還有一點關鍵點是:正則表達式在解析的時候從左往右,* 和 + 和 ?從左往右只與自己最近的一塊作用。
附加常用的匹配例子
附 : 常用的正則表達式:
匹配特定數字:
^[1-9]d*
^-?[1-9]d*
^-[1-9]d*|0
^-([1-9]d*.d*|0.d*[1-9]d*)
^[1-9]d*.d*|0.d*[1-9]d*|0?.0+|0
評註:處理大量數據時有用,具體應用時注意修正
匹配特定字符串:
^[A-Za-z]+
^[a-z]+
^w+$ //匹配由數字、26個英文字母或者下劃線組成的字符串
在使用RegularExpressionValidator驗證控件時的驗證功能及其驗證表達式介紹如下:
只能輸入數字:“^[0-9]*
只能輸入至少n位數字:“^d{n,}
只能輸入零和非零開頭的數字:“^(0|[1-9][0-9]*)
只能輸入有1-3位小數的正實數:“^[0-9]+(.[0-9]{1,3})?
只能輸入非零的負整數:“^-[1-9][0-9]*
只能輸入由26個英文字母組成的字符串:“^[A-Za-z]+
只能輸入由26個小寫英文字母組成的字符串:“^[a-z]+
只能輸入由數字、26個英文字母或者下劃線組成的字符串:“^w+
只能包含字符、數字和下劃線。
驗證是否含有^%&’,;=?”等字符:“[^%&’,;=? x22]+”
只能輸入漢字:“^[u4e00-u9fa5],{0,}$”
驗證Email地址:“^w+[-+.]w+)@w+([-.]w+).w+([-.]w+)*$”
驗證InternetURL:“^http://([w-]+.)+[w-]+(/[w-./?%&=]*)?
正確格式爲:“XXXX-XXXXXXX”,“XXXX-XXXXXXXX”,“XXX-XXXXXXX”,
“XXX-XXXXXXXX”,“XXXXXXX”,“XXXXXXXX”。
驗證身份證號(15位或18位數字):“^d{15}|d{}18
驗證一個月的31天:“^((0?[1-9])|((1|2)[0-9])|30|31)$”
正確格式爲:“01”“09”和“1”“31”。
匹配中文字符的正則表達式: [u4e00-u9fa5]
匹配雙字節字符(包括漢字在內):[^x00-xff]
匹配空行的正則表達式:n[s| ]*r
匹配HTML標記的正則表達式:/< (.)>.|< (.*) />/
匹配首尾空格的正則表達式:(^s*)|(s*$)
匹配Email地址的正則表達式:w+([-+.]w+)@w+([-.]w+).w+([-.]w+)*
匹配網址URL的正則表達式:http://([w-]+.)+[w-]+(/[w- ./?%&=]*)?
使用正則表達式查找不包含連續字符串abc的單詞,最終結果:\b(a(?!bc)|^a)((?