1.正則表達式java
正則表達式就是使用一系列預約義的特殊字符來描述一個字符串的格式規則,而後使用該格式規則匹配某個字符串是否符合格式要求。正則表達式
1)"."和"\"ide
"."點兒,在正則表達式中表示任意一個字符。 spa
"\"在正則表達式中是轉意字符,當咱們須要描述一個已經被正則表達式使用的特殊字符時,咱們就能夠經過使用"\"將其轉變爲本來的意思。 orm
"\"在正則表達式中也有一些預約義的特殊內容: blog
\d:表示任意一個數字 ip
\w:表示任意一個單詞字符(只能是 數字,字母,下劃線)ci
\s:表示任意一個空白字符(\t \r \n \f \x0B)字符串
\D:表示任意一個非數字字符get
\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)"^"和"$"
經過在正則表達式的開始添加"^"以及末尾添加"$"來表示一個總體。若不使用它們,那麼正則表達式只匹配某個字符串的部份內容是否符合格式規則,但使用它們,則要求字符串必須從頭至尾都知足該格式規則。
例如,^\w{ 8,10 }$ 表示總體字符串只能出現單詞字符8-10個。
7)使用正則表達式須要注意:
① 郵箱格式的正則表達式 @無特殊含義,可直接寫,也可[@]
② 使用Java字符串去描述正則表達式的時候,會出現一個衝突,即如何正確描述正則表達式的「.」。
原由:
在正則表達式中咱們想描述一個「.」,但「.」在正則表達式中有特殊含義,他表明任意字符,因此咱們在正則表達式中想描述「.」的願義就要寫成「\.」可是咱們用java字符串去描述正則表達式的時候,由於「.」在java字符串中沒有特殊意義,因此java認爲咱們書寫String s="\.";是有語法錯誤的,由於「.」不須要轉義,這就產生了衝突。
處理:咱們實際的目的很簡單,就是要讓java的字符串描述"\."又由於在java中"\"是有特殊含義的,表明轉義字符咱們只須要將"\"轉義爲單純的斜槓,便可描述"\."了因此咱們用java描述「\.」的正確寫法是String s="\\.";
③ 若正則表達式不書寫^或$,正則表達式表明匹配部份內容,都加上則表示權匹配。
案例4: