正則表示式(3)---運算子優先順序
前言
上一節,對於正則的表示式的匹配規則做了相應的講解。對於閱讀正則表示式有了很好的提升。但是,與一般語言運算子相對比,正則表示式的運算子也是相當多,那麼如何分辨他們的優先順序。這裡我們貼出一個非常複雜的模式:
[\w!#$%&'*+/=?^_`{|}~-]+(?:\.[\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\w](?:[\w-]*[\w])?\.)+[\w](?:[\w-]*[\w])?//本表示式功能用來匹配郵箱地址
運算子
由於在第一章正則表示式(1)---語法講解 中運算子處在不同的功能專案中,我們沒有統一製作成表格,這裡將第一章中出現的運算子統計如下:
運算子 | 描述 |
---|---|
\ | 轉義符 |
(), (?:), (?=), [] | 圓括號和方括號 |
*, +, ?, {n}, {n,}, {n,m} | 限定符 |
^, $, \任何元字元、任何字元 | 定位點和序列(即:位置和順序) |
| | 替換,"或"操作"字元具有高於替換運算子的優先順序,使得"m|food"匹配"m"或"food"。若要匹配"mood"或"food",請使用括號建立子表示式,從而產生"(m|f)ood"。 |
上面的運算子的優先順序由高到低,我們在檢視正則表示式的時候
可以按照這個順序來閱讀。
閱讀思路
[\w!#$%&'*+/=?^_`{|}~-]+(?:\.[\w!#$%&'*+/=?^_`{|}~-]+)*@(?:[\w](?:[\w-]*[\w])?\.)+[\w](?:[\w-]*[\w])?
其中@是郵箱的標識,這裡對前後內容進行拆分
[\w!#$%&'*+/=?^
`{|}~-]+(?:\.[\w!#
%&'*+/=?^
`{|}~-]限制字元格式,再拆分
-
\w匹配包括下劃線的任何單詞字元。等價於'[A-Za-z0-9_]'
這個模式可以解釋成支援!#$%&'*+/=?^_`{|}~-這些符號外,也支援所有的單詞和數字。
-
+匹配前面的子表示式一次或多次。
也就代表郵箱的開頭必須是數字或限定內的特殊字元
-
(?:pattern)匹配 pattern 但不獲取匹配結果,也就是說這是一個非獲取匹配,不進行儲存供以後使用。這在使用 "或" 字元 (|) 來組合一個模式的各個部分是很有用。
-
*匹配前面的子表示式零次或多次。
(?:\.[\w!#$%&'*+/=?^_`{|}~-]+)*這裡可以翻譯成支援帶/和任何引數
@後面的可以按照這也原理解讀。
到這裡,運算子的優先順序解釋也已經結束。多謝大家支援。後面章節會貼出許多常用的正則表示式,供大家學習。