正則表達式:正則表達式是一種對字符串操做的邏輯表達式,用來對字符串進行篩選和匹配正則表達式
構成:正則表達式由元字符和普通字符構成,普通字符包含字母,數字,特殊符號,遇到普通字符直接寫就能夠匹配了,遇到轉義字符須要\\去轉義測試
重點在元字符,元字符纔是正則表達式的靈魂網站
優缺點:編碼
優勢:靈活,功能性強,邏輯性強3d
缺點:難理解,不易上手blog
咱們通常能夠用這個網站進行正則表達式的測試:http://tool.chinaz.com/regex/圖片
下面來介紹正則表達式的靈魂----元字符ci
我只給出一些經常使用的元字符:
1.字符組字符串
用[]括起來的字符串叫作字符組,[]內的字符會被匹配到im
eg:正則表達式是[abc],那麼字符串中的a,b,c都會被匹配到
若是字符組裏的內容過多,還能夠用-表示範圍的意思,eg:[a-z]就是匹配a到z之間的全部小寫字母(包括a,z) [A-Za-z]匹配的是A-Z與a-z之間的全部字母(包括兩端)
ps:爲何是A-Z寫前面呢? 字符組裏的內容的順序是按照ascii碼的順序,在ascii碼錶裏A-Z排在a-z的前邊,因此他就排前邊嘍,順序千萬不能反,不然匹配不出來
2.簡單元字符(經常使用)
. 匹配除換行符之外的任意字符
\w 匹配字母或數字或下劃線
\s 匹配任意空白符
\d 匹配數字
\n 匹配一個換行符
\t 匹配一個製表符
\b 匹配一個單詞的結尾,前邊要寫結尾的字母
^ 匹配字符串的開頭,後邊要寫開頭的字符串
$ 匹配字符串的結尾,前邊要寫結尾的字符串
\W 匹配非字母或數字或下劃線
\D 匹配非數字
\S 匹配非空白符
a|b 匹配字符串a或字符串b
() 匹配括號內的表達式, ps:()的優先級高,匹配時先看()中的內容
[] 字符組(上邊已經說過了)
[^] 匹配除了字符串中的字符的全部其餘字符
3.量詞
使用量詞能夠一次性的匹配到不少個字符
* 重複0次或更屢次
+ 重複一次或更屢次
? 重複零次或一次
{n} 重複n次
{n,} 重複n次或更屢次
{n,m} 重複n-m次
4.惰性匹配和貪婪匹配
惰性和貪婪顧名思義,一個表示儘量的少,一個表示儘量的多
量詞中的 * + {} 都屬於貪婪匹配,就是在知足匹配時,儘量長的匹配字符串
?則屬於惰性匹配,就是在知足匹配時,儘量少的匹配字符串
理論的東西差很少說完了,咱們實踐一下
咱們看下這個,正則表達式是小明.*,首先只要是小明就能匹配到,而後.,就是除了換行符都能匹配到,而後*就是貪婪匹配,儘量的多的匹配
若是加一個?呢,應該匹配小明吧,由於?屬於惰性匹配,匹配的小明以後,儘量少的匹配,也就是不匹配字符了,咱們來驗證一下
與咱們的猜測符合,繼續往下看
簡單分析一下,首先以<開頭才能進行匹配,而後.*表示只要是換行符我都能匹配到,而後還得是>結尾,字符串知足這些規則,很天然就匹配上了
下邊着重說一下貪婪匹配和惰性匹配
第一張圖片是惰性匹配,第二章圖片是貪婪匹配,咱們能夠很清楚的看到差異,
在第一張圖中,惰性這個詞體現的淋漓盡致,由於有.因此他要匹配除了換行符以外的字符,而後又一a爲結尾,因此我儘量的少匹配,只要匹配a前邊一個字符就行了,一匹配a就返回匹配結果
在第二種圖中,貪婪這個詞也體現的淋漓盡致,首先仍是先匹配除換行符之外的其餘字符,而後以a爲結尾,可是碰到第一個a我無論,繼續往下匹配,知道碰到最後一個a,我才返回匹配結果,儘量的是匹配到的字符串長
下邊我給出幾個經常使用的正則表達式(摘自http://tool.chinaz.com/regex/),咱們能夠本身解讀一下,固然若是有能力的話,本身寫正則也不錯
E-mail地址:\w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\.)+[A-Za-z]{2,14}
身份證號:\d{17}[\d|x]|\d{15}
手機號(國內):0?(13|14|15|17|18|19)[0-9]{9}
郵政編碼:\d{6}
IP地址:(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)
格式日期:\d{4}(\-|\/|.)\d{1,2}\1\d{1,2}
還有不少,我就不寫了,能夠自行瀏覽