目錄
- 0.寫在前面
- 1.特殊單字符
- 2.空白符
- 3.范圍
- 4.量詞
- 5.實戰
- 1.如何表達一個兩位數字的范圍
- 2.如何表達一個三位數字的范圍
- 3.組合
- 6.寫在最后
0.寫在前面
在開發中,正則表達式常用于郵箱、手機號的校驗,文本的批量查找、替換等操作。
大部分同學,在拿到需求的時候,第一件事一定是打開瀏覽器,搜索:郵箱 正則表達式 怎么寫,然后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])){3}$
如果你沒看過本篇文章,第一眼看到這個表達式一定有點頭暈,亂七八糟寫的是啥,別擔心,學完后你就會發現,那些看似復雜的表達式,其實也不過如此。
本篇文章主要內容的思維導圖,后續可用于快速查詢:

1.特殊單字符
在正則表達式中,普通字符表示的還是原來的意思,比如表達式 1 可以匹配到數字 1,表達式 a 可以匹配到字母 a。
但是如果想要匹配到更多字符的時候,我們不可能把所有的字符都列一遍,這樣就太浪費時間了,那有什么更好的辦法呢,接下來就是元字符大顯身手的時間了。
.
點號通配符,可以匹配到除換行外的任意字符:

\d
數字通配符,可以匹配到數字0-9
\D
如果將D大寫,則匹配到的是任意非數字,相當于 \d 的反義

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

\s
空白符通配符,可以配到任意空白符,包括回車、換行、換頁、制表符等
\S
如果將S大寫,則匹配到的是任意非空白符

到這里,特殊單字符就講完了,匯總下:

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

3.范圍
|
或,和你心中想的那個或是一樣的,ab|bc 可以匹配到ab或者bc
[...]
多選一,比如 [abc] 可以匹配到字母a,也可以匹配到字母b或c
[a-z]
匹配a到z之間的任意元素,\w 這個通配符就可以用 【a-zA-Z0-9_】 來表示
[^...]
取反,不能是括號內的任意單個元素
注意:以上的表達式每次只能匹配到單個元素

4.量詞
*
星號,代表出現0到多次,可以出現,也可以不出現,出現的話,不限制次數
+
加號,代表出現1到多次,也就是至少出現一次的意思
?
問號,代表出現0到1次,比如Http協議的正則就可以用 Https? 表示
{m}
代表出現m次,比如 a{1} 就表示匹配的規則中,字母a只能出現1次
{m,}
代表至少出現m次,{0,} 相當于星號,{1,} 相當于加號
{m,n}
代表出現m到n次,{0,1} 相當于問號

5.實戰
現在我們再回過頭來,看下文章開頭的正則表達式:
復制代碼 代碼如下:
^([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])){3}$
是不是覺得有點思路了,下面我們一起來實現下,先講講規則:
- IPv4地址的范圍,我們定義為 1.0.0.0 - 255.255.255.255,當然專業上肯定有更嚴格的定義劃分,我們此處不糾結
- 通過以上范圍,我們可以得出基本規則 [1-255].[0-255].[0-255].[0-255]
- 可以看出后三位是重復的 .[0-255],所以我們只需要先寫出 [0-255] 的規則,后面就很簡單了
^
和 $
用于標識行的開始和結束,這個我們下一篇文章會講到
開始吧:
1.如何表達一個兩位數字的范圍
通過上面的學習,我們知道一個數字可以用 \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次。
2.如何表達一個三位數字的范圍
兩位的寫完了,三位的就很簡單了,我們來寫下0-255的范圍。
這里要注意下:
- 當數字達到3位的時候,百位只能是1或2
- 當百位數字是2的時候,十位數字只能是0-5
- 當十位數字是5的時候,個位數字只能是0-5
來寫一下:
復制代碼 代碼如下:
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.組合
最后組合下,還記得 {3}
的含義嗎,代表這個字符或組合出現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])){3}$
大功告成,有沒有豁然開朗的感覺,驗證下:

6.寫在最后
到這里,正則表達式的基本用法就講完了,如果有問題可以給我留言評論,謝謝。
正則表達式在線校驗工具:https://regex101.com/
到此這篇關于正則表達式那些讓人頭暈的元字符的文章就介紹到這了,更多相關正則表達式 元字符內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:- 十分鐘上手正則表達式 上篇
- 正則表達式常見的4種匹配模式小結
- 正則表達式分組與引用的使用
- 正則表達式量詞與貪婪的使用詳解
- 正則表達式之分組的回溯引用問題
- 十分鐘上手正則表達式 下篇