標籤:Regex
1.Regex
Regex就是使用一系列預定義的特殊字元來描述一個字串的格式規則,然後使用該格式規則匹配某個字串是否符合格式要求。
1)"."和"\"
"."點兒,在Regex中表示任意一個字元。
"\"在Regex中是轉意字元,當我們需要描述一個已經被Regex使用的特殊字元時,我們就可以通過使用"\"將其轉變為原本的意思。
"\"在Regex中也有一些預定義的特殊內容:
\d:表示任意一個數字
\w:表示任意一個單詞字元(只能是 數字,字母,底線)
\s:表示任意一個空白字元(\t \r \n \f \x0B)
\D:表示任意一個非數字字元
\W:表示任意一個非單詞字元
\S:表示任意一個非空白字元
2)"字元集合 [ ]"
"[ ]"用來描述單一字元,方括弧內部可以定義這個字元的內容,也可以描述一個範圍。例如:
[abc]:表示該字元只能是a或者b或者c
[123]:表示該字元只能是1或者2或者3
當我們需要描述所有小寫字母時,我們可以使用範圍 [a-z],表示該字元可以是任意一個小寫字母。
同樣還可以使用 [0-9] 來表示該字元可以是任意一個數字。
也可以在多個範圍內選擇。比如,[a-zA-Z0-9_] 表示該字元可以是任意字母,數字以及"底線"。
3)"*"、"+"、"?"
通常我們需要描述的字串會有很多重複出現的元素,但又不需要嚴格限制出現的次數時,我們就可以使用"*","+"這些量詞。
例如:郵箱地址,那麼在"@"字元前允許出現若干字元作為使用者名稱。這時候我們就可以使用"\w+"來描述這裡至少出現一個單詞字元了。
"+":表示內容可以連續出現至少1次以上
"*":表示內容出現0-若干次
"?":表示內容出現0-1次
4){n}、{n,}{n,m}
除了前面講到的量詞外,有時我們也需要要求內容出現的次數有具體要求。比如手機號碼。這時我們要求出現的數字就不能是一個模糊的概念了,而必須要求11位。又比如我們要求使用者輸入密碼時,要求密碼是6-15位。遇到這類問題是,我們可以使用:
{n}:表示內容必須出現n次
{n,m}:表示內容出現n-m次
{n,}:表示內容出現至少n次
例如,\d{11} 就表示數字只能出現11位,這樣就解決了上述的問題。
5)分組
在描述電話號碼時,前面有區號,區號的形式可以是0086或者+86,那麼我們如何在這兩個字串之間選擇?這時我們可以使用分組"()"。
() 可以將內容看做一個整體,()中可以使用"|"來表示或關係。例如,(+86|0086) 表示這裡可以是+86或者0086。
6)"^"和"$"
通過在Regex的開始添加"^"以及末尾添加"$"來表示一個整體。若不使用它們,那麼Regex只匹配某個字串的部分內容是否符合格式規則,但使用它們,則要求字串必須從頭到尾都滿足該格式規則。
例如,^\w{ 8,10 }$ 表示整體字串只能出現單詞字元8-10個。
7)使用Regex需要注意:
① 郵箱格式的Regex @無特殊含義,可直接寫,也可[@]
② 使用Java字串去描述Regex的時候,會出現一個衝突,即如何正確描述Regex的“.”。
起因:
在Regex中我們想描述一個“.”,但“.”在Regex中有特殊含義,他代表任一字元,所以我們在Regex中想描述“.”的願義就要寫成“\.”但是我們用java字串去描述Regex的時候,因為“.”在java字串中沒有特殊意義,所以java認為我們書寫String s="\.";是有語法錯誤的,因為“.”不需要轉義,這就產生了衝突。
處理:我們實際的目的很簡單,就是要讓java的字串描述"\."又因為在java中"\"是有特殊含義的,代錶轉義字元我們只需要將"\"轉義為單純的斜杠,即可描述"\."了所以我們用java描述“\.”的正確寫法是String s="\\.";
③ 若Regex不書寫^或$,Regex代表匹配部分內容,都加上則表示權匹配。
案例4:
650) this.width=650;" style="width:672px;height:411px;" title="04 clipboard.png" src="http://s3.51cto.com/wyfs02/M02/6D/E6/wKioL1VuxU_ioeyPAANnQLBJlvw820.jpg" width="710" height="421" alt="wKioL1VuxU_ioeyPAANnQLBJlvw820.jpg" />
本文出自 “永遠年輕” 部落格,請務必保留此出處http://kingkongzhao.blog.51cto.com/6319491/1657973
Java核心API -- 3(Regex)