正則表達不再靠control+v

1. 前言

  • 以前每次需要正則的時候總是去control+c&v,后來有次遇到大牛寫邏輯業(yè)務的時候直接用正則處理一些判斷,覺得:嗯!很cool,需要去了解下!!
  • 看完之后,基本語法了解了之后還是要多用,多嘗試,才能把這個技能寫的越來越溜,才能把這個逼裝好

2. 準備

  • 首先先怎么要看幾篇文章吧,主要看了小松哥的文章和語法介紹

    系統(tǒng)地學習正則表達式(一):基礎篇
    正則表達式 - 語法

  • 工具:Regextor:可以校驗你寫的的正則表達式的正確性的APP,APPStore上6元,當然有時間可以自己找找破解版
    Regextor.png
  • 正則表達式就是用事先定義好的一些特定字符、及這些特定字符的組合,組成一個“規(guī)則字符串”,用來表達對字符串的一種過濾邏輯,畫下重點:規(guī)則字符串+過濾匹配

3. 字符&字符集的匹配

3.1 精確匹配某一個字符
  • 使用[]包裹的字符即是需要特殊匹配的字符
  • 默認是會區(qū)分大小寫


    精確某一個字符.png

3.2 匹配任意字符

  • 使用.來表示一個任意字符, 使用..來表示兩個任意字符,以此類

    匹配一個任意字符.png

    匹配兩個任意字符.png

  • 解釋:

    c.t:會匹配以c開頭,以t結尾,中間為任意一個字符的字符串
    c..t會匹配以c開頭,以t結尾,中間為任兩個字符的字符串

3.3 匹配特定字符集

  • 使用[xxx]包裹的內容表示匹配特定字符集中中的一個字符

    匹配特定字符集.png

  • 解釋:

    [abcd]會匹配a or b or c or d。所以c[abcd]t會匹配" cat "和" cbt "而不會匹配" cet "

3.4 匹配特定字符集區(qū)間

  • [x-x]表示匹配一個特定的區(qū)間
  • 常用的字符集區(qū)間

    [a-z]:匹配所有小寫字母區(qū)間
    [A-Z]:匹配所有大寫字母區(qū)間
    [0-9]:匹配所有數(shù)字區(qū)間
    [A-z]: 匹配從 ASCIIA到ASCIIz的所有字符(不僅僅匹配所有字母,還匹配在 ASCII 表中 A 到 z 中的字符,如 [ 和 ^ 等)
    [A-Za-z0-9] :匹配所有的大小寫字母和數(shù)字

匹配字符集.png

3.5 非字符集的匹配

  • 使用場景:需要排除一組不需要匹配的字符集
  • ^是將字符集合中的所有字符都取消匹配
  • ^要寫扎起字符集[]
非字符集的匹配.png
  • 解釋:

    [^a-z] 匹配所有不是小寫字母的字符

4. 元字符

4.1 轉義字符及補充

  • 正則中的元字符.都需要加上\轉義
  • 需要匹配\則需要使用\\or\\\來實現(xiàn)
    \轉義字符的補充.png
\轉義字符的補充2.png

4.2 常用元字符

元字符 描述
[\b] 退格符
\f 換頁符
\n 換行
\r 回車
\t 制表符
\v 垂直制表符
\d 任何數(shù)字 (同 [0-9])
\D 任何非數(shù)字 (同 [^0-9])
\w 所有的文字數(shù)字式字符:大小寫字母、數(shù)字和下劃線 (同 [a-zA-Z0-9_])
\W (同 [^a-zA-Z0-9_])
\s 所有的空白字符 (同 [\f\n\r\t\v])
\S 所有的非空白字符 (同 [^\f\n\r\t\v])
原字符的使用1.png
原字符的使用2.png

5. 匹配次數(shù)&多次匹配的使用

5.1 "1+"次匹配(一次以上匹配)

  • +表示匹配一個或者多個字符。例如,a將匹配"a",而a+則匹配一個或者多個"a"
  • 當在字符集合上使用+的時候,需要將+符號放在集合外面
一次以上的匹配.png
字符集一次以上的匹配.png

5.2 "0+"次匹配(0次以上匹配)

  • 匹配零個或更多字符的時候,可以使用*元字符
    0次以上匹配.png
0次以上字符集匹配.png

5.3 0or1次匹配(匹配0個或者1個字符)

  • ?匹配零個或者一個字符。所以:?非常適合于在文本中匹配一個可選的字符

5.4 匹配次數(shù)-精確匹配次數(shù)

  • 指定匹配的次數(shù)。次數(shù)可以在“ { ”和“ } ”之間指定,表示在{}之前的字符執(zhí)行幾次匹配
    指定次數(shù)匹配.png

5.5 匹配次數(shù)-至少匹配次數(shù)

  • 至少匹配次數(shù):只指定匹配次數(shù)的最小值。eg:{2,}意味著匹配至少兩次
  • 次數(shù)區(qū)間匹配:eg:{2,3}意味著最少匹配 2次,最多匹配3次
  • ?和{0,1}的功能是一樣的,+和 {1,}的作用是一樣的
    至少區(qū)間匹配次數(shù).png
至少匹配次數(shù).png

6. 貪婪匹配

  • 先看個??,但是匹配結果并不是我們想要的結果


    貪婪匹配.png
  • 為什么沒有像預期匹配兩個cat?
    • 這是因為*+都是貪婪匹配。也就是說,正則表達式總是尋找最大的匹配,而不是最小的,設計如此,我覺得的就像優(yōu)先級一樣,貪婪匹配的優(yōu)先級最低,匹配程度最廣
    • 貪婪匹配的時候就要使用這些量詞的非貪婪匹配(匹配盡可能少的字符).非貪婪量詞是在量詞后面加上?
貪婪量詞 非貪婪量詞
* *?
+ +?
{n,} {n,}?
非貪婪量詞.png

7. 匹配邊界

  • 字符串邊界匹配的元字符是^$,分別用于字符串的開始和結束
  • 注意^如果位于集合開始處的話,則表示否定;如果在集合外面,則將匹配字符串的開始位置
  • ??????:

    [^a-z] : 表示匹配非小寫字符
    ^[a-z]: 表示匹配字符串的開始位置,第一個字符匹配小寫字符

匹配邊界(開始).png
匹配邊界(結束).png
  • 綜合實例,實際開發(fā)中很多這樣的需求,以xx開頭,以xx結尾的字符串校驗,或者字符串中不允許有其它字符等等
    綜合例子.png
綜合例子錯誤.png

8. 實戰(zhàn)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容