雖說正則表達式在我們真正的項目開發過程中,大多數都是直接去查資料,但是對於一些正則表達式的基礎知識還是十分有必要了解的。比如讀懂一個正則表達式,還有面試的時候很可能會被問到。
1 學習教程
(1)學習網站:http://www.runoob.com/regexp/regexp-tutorial.html
(2)教程什麼的看的太煩了,而且還有些東西並不是很實用,下面花10分鐘就可以掌握實用的、基礎的正則表達式了。當然,這些東西都只是瞭解,快速入門,實用就行,會寫簡單的正則表達式,能夠看得懂正則表達式就夠了。
2 請把下面的符號表達的意思記住
* 表示前一個表達式可以出現0、1、多次
+ 表示前一個表達式可以出現1、多次
? 表示前一個表達式可以出現0、1次
^ 表示是否以指定字符串開頭,如果在[]前面使用,表示不接受該字符集合
$ 表示是否以指定字符串結尾
| 表示兩者間的選擇
. 匹配除換行(\n)外的任意一個字符
{n}表示前一個表達式出現確定的 n 次
{n,}表示前一個表達式至少出現n 次
{n,m}最少出現 n 次且最多出現 m 次
注:以上n和m都是非負整數
注:表達式可以是小括號括起來的式子,也可以是單個字符
3 好了,是不是感覺很簡單,下面以實例來講解
(1)實例一: ^once
分析:^的意思是,以某個指定的字符串開頭,所以上面正則表達式的意思是:匹配以once開頭的字符串
(2)實例二, ^a{2,4}$
分析:以a開頭,最少2個a,最多3個a,以a結尾。所以它能匹配的字符串是aa aaa aaaa
(3)補充: - 表示字符範圍。匹配指定範圍內的任意字符。例如,’[a-z]’ 可以匹配 ‘a’ 到 ‘z’ 範圍內的任意小寫字母字符。
(4)補充: \d 表示匹配任意一個數字。
(5)實例三,來個複雜的:
驗證如下手機號碼:
移動號碼段:139、138、137、136、135、134、150、151、152、157、158、159、182、183、187、188、147
聯通號碼段:130、131、132、136、185、186、145
電信號碼段:133、153、180、189
表達式如下:
^((13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(18[0,5-9]))\\d{8}$
(ps:以上表達式來源:http://www.jb51.net/article/96201.htm)
分析:把子表示式分解出來
^( #表示以某某開頭
(13[0-9]) #130到139
| #或者
(14[5|7]) #145或147
|
(15([0-3]|[5-9])) #150到153 或者 155到159
|
(18[0,5-9]) #180,185到189
)
\\d{8}$ #匹配任意8個數字,且以數字結尾