正規表示式那些讓人頭暈的元字元

2022-09-26 18:30:17 字數 2357 閱讀 3924

目錄

在開發中,正規表示式常用於郵箱、手機號的校驗,文字的批量查詢、替換等操作。

大部分同學,在拿到需求的時候,第一件事一定是開啟瀏覽器,搜尋:郵箱 正規表示式 怎麼寫,然後ctrl c + v,測試幾個條件沒問題,就提交了,出了問題也不知道怎麼修改,只能再求救熱心網友。

本篇文章,主要帶大家了解一下,正規表示式的基本用法,有個初步的了解,看到正則後不再一臉懵。

比如ipv4位址的正規表示式:

複製** **如下:

^([1-9][0-9]?|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(\.(0|[1-9][0-9]?|1[0-9][0-9]|2[0-4][0-9]|25[0-5]))$

如果你沒看過本篇文章,第一眼看到這個表示式一定有點頭暈,亂七八糟寫的是啥,別擔心,學完後你就會發現,www.cppcns.com那些看似複雜的表示式,其實也不過如此。

本篇文章主要內容的思維導圖,後續可用於快速查詢:

在正規表示式中,普通字元表示的還是原來的意思,比如表示式1可以匹配到數字1,表示式a可以匹配到字母a。

但是如果想要匹配到更多字元的時候,我們不可能把所有的字元都列一遍,這樣就太浪費時間了,那有什麼更好的辦法呢,接下來就是元字元大顯身手的時間了。

.點號萬用字元,可以匹配到除換行外的任意字元:

\d數字萬用字元,可以匹配到數字0-9

\d如果將d大寫,則匹配到的是任意非數字,相當於 \d 的反義

\w字母數字下劃線萬用字元,可以匹配到任意的字母數字下劃線

\w如果將w大寫,則匹配到的是任意非字母數字下劃線

\s空白符萬用字元,可以配到任意空白符,包括回車、換行、換頁、製表符等

\s如果將s大寫,則匹配到的是任意非空白符

到這裡,特殊單字元就講完了,彙總下:

空白符分為下圖中的幾類,一般我們qtozfjku用\s表示就可以了:

|或,和你心中想的那個或是一樣的,ab|bc可以匹配到ab或者bc

[...]多選一,比如[abc]可以匹配到字母a,也可以匹配到字母b或c

[a-z]匹配a到z之間的任意元素,\w這個萬用字元就可以用【a-za-z0-9_】來表示

[^...]取反,不能是括號內的任意單個元素

注意:以上的表示式每次只能匹配到單個元素

*星號,代表出現0到多次,可以出現,也可以不出現,出現的話,不限制次數

+加號,代表出現1到多次,也就是至少出現一次的意思

?問號,代表出現0到1次,比如http協議的正則就可以用https?表示

代表出現m次,比如a就表示匹配的規則中,字母a只能出現1次

代表至少出現m次,相當於星號,相當於加號

代表出現m到n次,相當於問號

現在我們再回過頭來,看下文章開頭的正規表示式:

複製** **如下:

^([1-9][0-9]?|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(\.(0|[1-9][0-9]?|1[0-9][0-9]|2[0-4][0-9]|25[0-5]))$

是不是覺得有點思路了,下面我們一起來實現下,先講講規則:

開始吧:

通過上面的學習,我們知道乙個數字可以用\d或[0-9]來表示,如果要表達多位數呢,比如0-99。

可以這樣拆分,0-99的範圍,最少的位數是1位,最多的位數是2位,那我們可以用2個數字萬用字元來表示,為了清晰和美觀,我們此處用 **[0-9]**表示。

寫起來就是:

複製** **如下:

0|[1-9][0-9]?

其中,0代表數字0,因為要排除 00 的情況,所以不能使用[0-9][0-9]?來表示,中間有個或|,後面的[1-9][0-9]?表示1-99,還記得?的含義嗎,代表出現0到1次。

兩位的寫完了,三位的就很簡單了,我們來寫下0-255的範圍。

這裡要注意下:

來寫一下:

複製** **如下:

0|[1-9][0-9]?|1[0-9][0-9]|2[0-4][0-9]|25[0-5]

0-255到範圍寫完了,去掉0就成了1-255的範圍:

複製** **如下:

[1-9][0-9]?|1[0-9][0-9]|2[0-4][0-9]|25[0-5]

最後組合下,還記得的含義嗎,代表這個字元或組合出現3次:

注意:.點號別忘了用\轉義下

複製** **如下:

^([1-9][0-9]?|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(\.(0|[1-9][0-9]?|1[0-9][0-9]|2[0-4][0-9]|25[0-5]))$

大功告成,有沒有豁然開朗的感覺,驗證下:

到這裡,正規表示式的基本用法就講完了,如果有問題可以給我留言評論,謝謝。

正規表示式**校驗工具:https:/程式設計客棧/regex101.com/

正規表示式 元字元

現在你已經知道幾個很有用的元字元了,如 b 還有 d 當然還有更多的元字元可用,比如 s 匹配任意的空白符,包括空格,製表符 tab 換行符,中文全形空格等 w匹配字母或數字或下劃線或漢字等。ba w b 匹配以字母a 開頭的單詞 先是某個單詞開始處 b 然後是字母a 然後是任意數量的字母或數字 w...

正規表示式 元字元

元字元 描述.點 匹配任何單個字元。例如正規表示式r.t匹配這些字串 rat rut r t,但是不匹配root。匹配行結束符。例如正規表示式weasel 能夠匹配字串 he s a weasel 的末尾 但是不能匹配字串 they are a bunch of weasels.匹配一行的開始。例如...

正規表示式元字元

l 基本元字元 元字元說明 匹配任意單個字元 邏輯或操作符 定義乙個字元集合,匹配該集合中的乙個字元 對字元集合求非 是對整個集合求非,而不是緊挨著 符號的字元 在字元集合中定義乙個區間。如 a za z 對下乙個字元轉義。比如 n表示換行。數量元字元 元字元說明 匹配前乙個字元 子表示式 零次或多...