一篇文章教你寫正則,練完就會寫 [復制鏈接]

2019-9-26 11:02
jjcodecode 閱讀:237 評論:0 贊:1
Tag:  正則

正則表達式(Regular Expression)是一種文本模式,使用單個字符串來描述、匹配一系列匹配某個句法規則的字符串。它繁瑣也強大,幾乎所有所有編程語言都支持利用正則表達式進行字符串操作。認真學習,勤動手。加上應用的時候進行一定的參考,掌握正則表達式不是問題。

首先我們用一條正則來做通篇的線索列表可以不記,但練習一定要做

\w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+.)+[A-Za-z]{2,14}

在線正則檢測工具 (可以生成各種語言正則匹配的代碼)

語法

元字符

:\w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+.)+[A-Za-z]{2,14}

\w 表示 匹配字母、數字、下劃線

它是元字符,除此之外的元字符還有:

一篇文章教你寫正則,練完就會寫

有了元字符,我們就可以練些簡單的匹配

1. 匹配ing結尾單詞

ing\b

2. 匹配11位數的中國手機號:

1\d\d\d\d\d\d\d\d\d\d

區間

:\w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+.)+[A-Za-z]{2,14}

[-\w.+] 區間,表示 匹配符號 -,或字母、數字、下劃線,或符號 . ,或符號 +

除此之外的常見用法還有:

一篇文章教你寫正則,練完就會寫

限定符

:\w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+.)+[A-Za-z]{2,14}

* 表示出現,匹配前面的子表達式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"

除此之外的限定符還有:

一篇文章教你寫正則,練完就會寫

有了區間、限定符,結合元字符

1. 匹配9位數的QQ郵箱:

[0-9]{9}@qq.com

2. 身份證號:

\d{17}[0-9Xx]|\d{15}

3. ip地址:

\d{0,3}.\d{0,3}.\d{0,3}.\d{0,3}

普通字符 和 轉義

:\w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\.)+[A-Za-z]{2,14}

@ 是普通字符,標識必定會出現的內容。 比如:匹配域名 juejin.im,你完全可以用

https://juejin.im

但由于符號 /、.、(、) 等等在正則是特殊字符,所以需要用轉義符 \ 轉義

https:\/\/juejin\.im

學到這里

學到這里。結合在線檢測工具,就能滿足工作基本需要

在線正則檢測工具 (可以生成各種語言正則匹配的代碼)

https://tool.lu/regex/

接下來會說正則中重要的概念

子表達式

用圓括號組成一個比較復雜的匹配模式,那么一個圓括號的部分我們可以看作是一個子表達式。

舉例 var reg=/(\d)([a-z]*)/gi

  • (\d)就是第一個子表達式
  • ([a-z]) 是第二個子表達式

捕獲 & 反捕獲

多個子表達式所匹配到的內容按順序出現在內存的緩沖區中捕獲數組,這個我們稱為捕獲

舉例 var reg=/(\d)([a-z]*)/gi 匹配 1adkk

用js代碼驗證下:/(\d)([a-z]*)/gi

一篇文章教你寫正則,練完就會寫

反捕獲 與 捕獲相反,標記不需要捕獲的內容

用js代碼驗證下:/(?:\d)([a-z]*)/gi

一篇文章教你寫正則,練完就會寫

反向引用

圓括號的內容被捕獲后,可以在這個括號后被使用,從而寫出一個比較實用的匹配模式,這個我們稱為反向引用

var str="1adkk" var reg=/(\d)([a-z])/gi

把 (\d)匹配到的結果 1 放入緩存區 => 引用 $1

把 ([a-z])匹配的內容 a 放入緩存區 => 引用 $2

用js代碼驗證下:

一篇文章教你寫正則,練完就會寫

貪婪

貪婪匹配:當正則表達式中包含能接受重復的限定符時,通常的行為是(在使整個表達式能得到匹配的前提下)匹配盡可能多的字符,這匹配方式叫做貪婪匹配。

舉個例子:

一篇文章教你寫正則,練完就會寫

由結果得知:“1adkk adkkk adkkkk”這一段,其實只需要出現4個字母就匹配成功,但是它并不滿足,而是匹配到了最大能匹配的字符,也就是6個。 一個量詞就如此貪婪

懶惰 / 非貪婪

當正則表達式中包含能接受重復的限定符時,通常的行為是(在使整個表達式能得到匹配的前提下)匹配盡可能少的字符,這匹配方式叫做懶惰匹配。

懶惰量詞是在貪婪量詞后面加個?

一篇文章教你寫正則,練完就會寫

一篇文章教你寫正則,練完就會寫

我來說兩句
您需要登錄后才可以評論 登錄 | 立即注冊
facelist
所有評論(0)
領先的中文移動開發者社區
18620764416
7*24全天服務
意見反饋:[email protected]

掃一掃關注我們

Powered by Discuz! X3.2© 2001-2019 Comsenz Inc.( 粵ICP備15117877號 )

重庆时时彩开奖模拟器