正則表達式 深刻淺出1--你的符號我作主【持續更新中

引言

在leetcode中刷到了一題是關於正則表達式的。然而網上給出的關於正則表達式的信息每每都是現成的,直接照搬仍是能夠的,可是並不能掌握到精髓。因此,我用這篇文章來由淺入深的介紹一下我學習正則表達式的過程。該博客將隨着學習進度不斷更新,但願各位可以指出博主在學習中的誤區面試

從符號提及

先簡單介紹正則表達式中幾個比較基礎的符號以及它的平常用法:正則表達式

^ 將節點定位到一行的開頭
$ 將節點定位到一行的最後
這兩個符號沒有其它特殊含義,主要是用於定位,下面舉個書上例子來區分一下微信

^cat 將返回以cat爲開頭的字符串如 catrd
cat$ 則會返回以cat爲結尾的字符串如 sscat
'cat` 則會返回相似 sdfcatsdf也就是包含cat的任何字符串

這裏要提一個比較特殊的例子,也就是^$,這個表達式匹配到的是空行(沒有任何字符串,包括空白字符)app


[] 字符組 字符組中的值都是潛在值
[-] 字符組元字符下劃線 在字符組中才會生效,表示一個區域
[^...] 排除型字符組 在字符組中才會生效,會匹配到一切不在字符組中的元素(ps:這裏的符號和開頭的^是相同的符號,位置不一樣帶來的含義也就不一樣)
一樣,舉例說明用法學習

[aA]pp : 匹配到app或App,字符組經常使用於匹配大小寫上
[0-9] :匹配到全部的數字。字符組中的元素 容許混搭組合,例如[0-9a-zA-Z]匹配到全部的數字和字母
[^0-9] :匹配到非數字的全部字符

這裏須要注意的是對排除型字符組的理解。排除型字符組是指匹配一個未列出的字符,而不是不要匹配列出的字符。書上給的例子是找到一個字母q後面不是字母u的單詞,這裏試圖使用的正則表達式是q[^u],可是Iraq並無在結果集中。也就是說,這個正則表達式會匹配一個非u之外的任何且至少一個字符。換句話說,即使是排除型字符組,也須要至少匹配到一個字符spa


. 匹配任意一個字符code

09.10.11 : 能夠匹配到09-10-11以及09/11/11甚至09810 11。 這裏須要注意的是,若是想要縮小.的範圍,可使用字符組如[-./],可是不可使用[.-/]由於這時的-表示範圍

| 多選結構 即or (a|b)=[ab]<>[a|b]教程

這裏的實用場景有 (fir|1)st,即first和1st是等價的

? 可選項元素,表示容許出現,但其出現並不是匹配成功的必要條件ip

colou?r color 或者colour都可以
July?(4th|fourth) 7月4日的多種表示

+ 以前緊鄰的元素出現一次或者屢次
* 以前緊鄰的元素出現任意屢次或者不出現
{} 區間 規定重複出現的次數leetcode

[0-9]+ 匹配到11,18,即這些數字至少出現一次
[0-9]* 匹配到1,2或是空,即這些數字能夠出現屢次或是不出現
[0-9]{2,8} 匹配到2~8個數字
[0-9]{1,} 至少匹配到一個數字,等價與[0-9]+

\ 轉義字符,即若是須要匹配的字符自己就是元字符,那麼就須要在該字符前添加轉義字符

[1\-9] 等價於(1|-|9)

一些快捷符號:
\t 匹配製表符
\n 匹配換行符
\b 匹配退格符
\f ASCII的進紙符
\s 匹配全部空白,包括空格符,製表符,換行符,回車符
\S 匹配全部s之外的字符
\w [a-zA-Z0-9]
\W [^a-zA-Z0-9]
\d [0-9]
\D [^0-9]

[ \t]*能夠匹配多個空格或多個製表符

整理和總結

這裏將上文中提到的正則表達式的含義進行整理,以便之後查閱。

^ 將節點定位到一行的開頭
$ 將節點定位到一行的最後
[] 字符組 字符組中的值都是潛在值
[-] 字符組元字符下劃線 在字符組中才會生效,表示一個區域
[^...] 排除型字符組 在字符組中才會生效,會匹配到一切不在字符組中的元素(ps:這裏的符號和開頭的^是相同的符號,位置不一樣帶來的含義也就不一樣)
. 匹配任意一個字符
| 多選結構 即or (a|b)=[ab]<>[a|b]
? 可選項元素,表示容許出現,但其出現並不是匹配成功的必要條件
+ 以前緊鄰的元素出現一次或者屢次
* 以前緊鄰的元素出現任意屢次或者不出現
{} 區間 規定重複出現的次數
\ 轉義字符,即若是須要匹配的字符自己就是元字符,那麼就須要在該字符前添加轉義字符
\t 匹配製表符
\n 匹配換行符
\b 匹配退格符
\f ASCII的進紙符
\s 匹配全部空白,包括空格符,製表符,換行符,回車符
\S 匹配全部s之外的字符
\w [a-zA-Z0-9]
\W [^a-zA-Z0-9]
\d [0-9]
\D [^0-9]

至此已經可以看懂99%的正則表達式啦!可是說到活靈活現,還須要結合更多的閱讀和訓練哦~
若是這篇博客對你有用的話,請記得收藏以等待後序的更新

clipboard.png
想要了解更多開發技術,面試教程以及互聯網公司內推,歡迎關注個人微信公衆號!將會不按期的發放福利哦~

相關文章
相關標籤/搜索