深入java 定義正則表達式

這篇文章總結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*//[19]d   //匹配負整數
^-?[1-9]d*//[19]d|0   //匹配非負整數(正整數 + 0)
^-[1-9]d*|0//+0[19]d.d|0.d[19]d    //匹配正浮點數
^-([1-9]d*.d*|0.d*[1-9]d*)//?([19]d.d|0.d[19]d|0?.0+|0)   //匹配浮點數
^[1-9]d*.d*|0.d*[1-9]d*|0?.0+|0//+0(([19]d.d|0.d[19]d))|0?.0+|0   //匹配非正浮點數(負浮點數 + 0)
評註:處理大量數據時有用,具體應用時注意修正

匹配特定字符串:
^[A-Za-z]+//26[AZ]+   //匹配由26個英文字母的大寫組成的字符串
^[a-z]+//26[AZaz09]+   //匹配由數字和26個英文字母組成的字符串
^w+$  //匹配由數字、26個英文字母或者下劃線組成的字符串

在使用RegularExpressionValidator驗證控件時的驗證功能及其驗證表達式介紹如下:

只能輸入數字:“^[0-9]*ndn
只能輸入至少n位數字:“^d{n,}mndm,n
只能輸入零和非零開頭的數字:“^(0|[1-9][0-9]*)[09]+(.[09]2)?
只能輸入有1-3位小數的正實數:“^[0-9]+(.[0-9]{1,3})?+?[19][09]
只能輸入非零的負整數:“^-[1-9][0-9]*3.3
只能輸入由26個英文字母組成的字符串:“^[A-Za-z]+26[AZ]+
只能輸入由26個小寫英文字母組成的字符串:“^[a-z]+26[AZaz09]+
只能輸入由數字、26個英文字母或者下劃線組成的字符串:“^w+:[azAZ]w5,17 ”正確格式爲:以字母開頭,長度在6-18之間,

只能包含字符、數字和下劃線。
驗證是否含有^%&’,;=?”等字符:“[^%&’,;=? x22]+”
只能輸入漢字:“^[u4e00-u9fa5],{0,}$”
驗證Email地址:“^w+[-+.]w+)@w+([-.]w+).w+([-.]w+)*$”
驗證InternetURL:“^http://([w-]+.)+[w-]+(/[w-./?%&=]*)?((d3,4)|d3,4)?d7,8

正確格式爲:“XXXX-XXXXXXX”,“XXXX-XXXXXXXX”,“XXX-XXXXXXX”,

“XXX-XXXXXXXX”,“XXXXXXX”,“XXXXXXXX”。
驗證身份證號(15位或18位數字):“^d{15}|d{}1812(0?[19]|1[02]) ”正確格式爲:“01”-“09”和“1”“12”
驗證一個月的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)((?

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