目錄
- 0.寫在前面
- 1.特殊單字符
- 2.空白符
- 3.范圍
- 4.量詞
- 5.實(shí)戰(zhàn)
- 1.如何表達(dá)一個(gè)兩位數(shù)字的范圍
- 2.如何表達(dá)一個(gè)三位數(shù)字的范圍
- 3.組合
- 6.寫在最后
0.寫在前面
在開發(fā)中,正則表達(dá)式常用于郵箱、手機(jī)號的校驗(yàn),文本的批量查找、替換等操作。
大部分同學(xué),在拿到需求的時(shí)候,第一件事一定是打開瀏覽器,搜索:郵箱 正則表達(dá)式 怎么寫,然后Ctrl C + V,測試幾個(gè)條件沒問題,就提交了,出了問題也不知道怎么修改,只能再求救熱心網(wǎng)友。
本篇文章,主要帶大家了解一下,正則表達(dá)式的基本用法,有個(gè)初步的了解,看到正則后不再一臉懵。
比如IPv4地址的正則表達(dá)式:
復(fù)制代碼 代碼如下:
^([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}$
如果你沒看過本篇文章,第一眼看到這個(gè)表達(dá)式一定有點(diǎn)頭暈,亂七八糟寫的是啥,別擔(dān)心,學(xué)完后你就會發(fā)現(xiàn),那些看似復(fù)雜的表達(dá)式,其實(shí)也不過如此。
本篇文章主要內(nèi)容的思維導(dǎo)圖,后續(xù)可用于快速查詢:
1.特殊單字符
在正則表達(dá)式中,普通字符表示的還是原來的意思,比如表達(dá)式 1 可以匹配到數(shù)字 1,表達(dá)式 a 可以匹配到字母 a。
但是如果想要匹配到更多字符的時(shí)候,我們不可能把所有的字符都列一遍,這樣就太浪費(fèi)時(shí)間了,那有什么更好的辦法呢,接下來就是元字符大顯身手的時(shí)間了。
.
點(diǎn)號通配符,可以匹配到除換行外的任意字符:
\d
數(shù)字通配符,可以匹配到數(shù)字0-9
\D
如果將D大寫,則匹配到的是任意非數(shù)字,相當(dāng)于 \d 的反義
\w
字母數(shù)字下劃線通配符,可以匹配到任意的字母數(shù)字下劃線
\W
如果將W大寫,則匹配到的是任意非字母數(shù)字下劃線
\s
空白符通配符,可以配到任意空白符,包括回車、換行、換頁、制表符等
\S
如果將S大寫,則匹配到的是任意非空白符
到這里,特殊單字符就講完了,匯總下:
2.空白符
空白符分為下圖中的幾類,一般我們用 \s
表示就可以了:
3.范圍
|
或,和你心中想的那個(gè)或是一樣的,ab|bc 可以匹配到ab或者bc
[...]
多選一,比如 [abc] 可以匹配到字母a,也可以匹配到字母b或c
[a-z]
匹配a到z之間的任意元素,\w 這個(gè)通配符就可以用 【a-zA-Z0-9_】 來表示
[^...]
取反,不能是括號內(nèi)的任意單個(gè)元素
注意:以上的表達(dá)式每次只能匹配到單個(gè)元素
4.量詞
*
星號,代表出現(xiàn)0到多次,可以出現(xiàn),也可以不出現(xiàn),出現(xiàn)的話,不限制次數(shù)
+
加號,代表出現(xiàn)1到多次,也就是至少出現(xiàn)一次的意思
?
問號,代表出現(xiàn)0到1次,比如Http協(xié)議的正則就可以用 Https? 表示
{m}
代表出現(xiàn)m次,比如 a{1} 就表示匹配的規(guī)則中,字母a只能出現(xiàn)1次
{m,}
代表至少出現(xiàn)m次,{0,} 相當(dāng)于星號,{1,} 相當(dāng)于加號
{m,n}
代表出現(xiàn)m到n次,{0,1} 相當(dāng)于問號
5.實(shí)戰(zhàn)
現(xiàn)在我們再回過頭來,看下文章開頭的正則表達(dá)式:
復(fù)制代碼 代碼如下:
^([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}$
是不是覺得有點(diǎn)思路了,下面我們一起來實(shí)現(xiàn)下,先講講規(guī)則:
- IPv4地址的范圍,我們定義為 1.0.0.0 - 255.255.255.255,當(dāng)然專業(yè)上肯定有更嚴(yán)格的定義劃分,我們此處不糾結(jié)
- 通過以上范圍,我們可以得出基本規(guī)則 [1-255].[0-255].[0-255].[0-255]
- 可以看出后三位是重復(fù)的 .[0-255],所以我們只需要先寫出 [0-255] 的規(guī)則,后面就很簡單了
^
和 $
用于標(biāo)識行的開始和結(jié)束,這個(gè)我們下一篇文章會講到
開始吧:
1.如何表達(dá)一個(gè)兩位數(shù)字的范圍
通過上面的學(xué)習(xí),我們知道一個(gè)數(shù)字可以用 \d
或 [0-9]
來表示,如果要表達(dá)多位數(shù)呢,比如0-99。
可以這樣拆分,0-99的范圍,最少的位數(shù)是1位,最多的位數(shù)是2位,那我們可以用2個(gè)數(shù)字通配符來表示,為了清晰和美觀,我們此處用 **[0-9]
**表示。
寫起來就是:
復(fù)制代碼 代碼如下:
0|[1-9][0-9]?
其中,0
代表數(shù)字0,因?yàn)橐懦?00 的情況,所以不能使用 [0-9][0-9]?
來表示,中間有個(gè)或 |
,后面的 [1-9][0-9]?
表示1-99,還記得 ?
的含義嗎,代表出現(xiàn)0到1次。
2.如何表達(dá)一個(gè)三位數(shù)字的范圍
兩位的寫完了,三位的就很簡單了,我們來寫下0-255的范圍。
這里要注意下:
- 當(dāng)數(shù)字達(dá)到3位的時(shí)候,百位只能是1或2
- 當(dāng)百位數(shù)字是2的時(shí)候,十位數(shù)字只能是0-5
- 當(dāng)十位數(shù)字是5的時(shí)候,個(gè)位數(shù)字只能是0-5
來寫一下:
復(fù)制代碼 代碼如下:
0|[1-9][0-9]?|1[0-9][0-9]|2[0-4][0-9]|25[0-5]
0-255到范圍寫完了,去掉0就成了1-255的范圍:
復(fù)制代碼 代碼如下:
[1-9][0-9]?|1[0-9][0-9]|2[0-4][0-9]|25[0-5]
3.組合
最后組合下,還記得 {3}
的含義嗎,代表這個(gè)字符或組合出現(xiàn)3次:
注意:.
點(diǎn)號別忘了用 \
轉(zhuǎn)義下
復(fù)制代碼 代碼如下:
^([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}$
大功告成,有沒有豁然開朗的感覺,驗(yàn)證下:
6.寫在最后
到這里,正則表達(dá)式的基本用法就講完了,如果有問題可以給我留言評論,謝謝。
正則表達(dá)式在線校驗(yàn)工具:https://regex101.com/
到此這篇關(guān)于正則表達(dá)式那些讓人頭暈的元字符的文章就介紹到這了,更多相關(guān)正則表達(dá)式 元字符內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:- 十分鐘上手正則表達(dá)式 上篇
- 正則表達(dá)式常見的4種匹配模式小結(jié)
- 正則表達(dá)式分組與引用的使用
- 正則表達(dá)式量詞與貪婪的使用詳解
- 正則表達(dá)式之分組的回溯引用問題
- 十分鐘上手正則表達(dá)式 下篇