前言
正則在實(shí)際中太多時(shí)候用到了蟀拷,但還沒(méi)有系統(tǒng)梳理過(guò),這周學(xué)了一些正則參考實(shí)際經(jīng)常用到的寫(xiě)一個(gè)簡(jiǎn)單的手冊(cè)拣播。
基礎(chǔ)
字符組
正則 | 解釋 |
---|---|
[aA] | 字符組[] 允許匹配一組可能出現(xiàn)的字符途茫,如:[jJ]ava 表示匹配java或者Java |
[0-9] | 字符-代表區(qū)間,如:[0-9a-zA-Z] 表示匹配任意大小寫(xiě)字母數(shù)字 |
\ | 對(duì)特殊符號(hào)進(jìn)行轉(zhuǎn)義的圆,如:[\<\>] 表示匹配<> 尖括號(hào) |
^ | 實(shí)現(xiàn)取反操作曼库,如:[^a-z] 表示匹配不包含小寫(xiě)字母的字符 |
字符串
正則 | 解釋 |
---|---|
^ | 匹配一個(gè)字符串的開(kāi)始 |
$ | 匹配一個(gè)字符串的結(jié)束 |
. | 匹配任何一個(gè)字符,注意:它只能出現(xiàn)在方括號(hào)以外略板,但是匹配的時(shí)候不包括\n |
毁枯? | 匹配可選字母,即出現(xiàn)該字母為一次或零次 |
+ | 匹配必須至少出現(xiàn)一次的字符叮称,即一次或多次 |
* | 匹配必須至少出現(xiàn)零次的字符种玛,即零次或多次 |
{n} | 匹配n次 |
{n,m} | 匹配n次到m次 |
快捷方式
基于以上基礎(chǔ),就有了快捷方式的匹配瓤檐。
正則 | 解釋 |
---|---|
\w | 表示匹配包括下劃線的任何單詞字符赂韵,等價(jià)于[A-Za-z0-9_] |
\d | 表示匹配任意數(shù)字,等價(jià)于[0-9] |
\s | 表示匹配空白字符挠蛉,如:空格祭示、tab、換行等 |
\b | 表示匹配單詞的邊界谴古,如:\bcode\b 匹配code.xxxx质涛,xxx.code |
取反 | \w 將小寫(xiě)改為大寫(xiě)即可\W,如:不以字母開(kāi)頭掰担,[^\w] |
高級(jí)
分組
正則 | 解釋 |
---|---|
() | 表示捕捉匹配到的數(shù)據(jù)汇陆,如<div>(.*?)</div> |
(\d{4}) | 表示匹配4個(gè)數(shù)字 |
(\d{1,2}) | 表示匹配到提取的1個(gè)到2個(gè)數(shù)字 |
(?:code) | 非捕捉分組,匹配code但不獲取 |
看個(gè)實(shí)例:匹配并提取下面的數(shù)字带饱。
就可以有多種寫(xiě)法毡代,
第一種寫(xiě)法:(?:\d+|tel)[\-\:](\d{5})
表示先匹配到數(shù)字或者tel字符,接著匹配-和:勺疼,最后提取五位數(shù)字教寂。
第二種寫(xiě)法, (?:.+)[-:](\d{5})
表示直接匹配到-和:执庐,再提取五位數(shù)字酪耕。
image.png
先行斷言、后行斷言
正則 | 解釋 |
---|---|
\x | 分組的回溯調(diào)用耕肩,匹配某種之前的規(guī)則因妇。如(\w)(\w)\2\1 表示匹配某種AB-BA對(duì)稱組合问潭,注意加括號(hào) |
(?=表達(dá)式) | 表示匹配到所在位置右側(cè)的表達(dá)式。如(?=.*?[a-z]) 表示匹配至少一個(gè)小寫(xiě)的字符串 |
(?!表達(dá)式) | 表示右邊不能出現(xiàn)某字符婚被。如:\w+@(?!qq.com) 表示匹配不是qq郵箱 |
(?<=表達(dá)式) | 表示匹配到所在位置左側(cè)的表達(dá)式狡忙,如:(?<=王).+ 就表示匹配王姓名字 |
(?<!表達(dá)式) | 指在某個(gè)位置向左看,表示所在位置左側(cè)不能匹配到表達(dá)式址芯,如:^\$.*?(?<!\$)\$(?!\$) 表示匹配兩個(gè)$$之間的數(shù)據(jù) |
再看個(gè)匹配小數(shù)的實(shí)例灾茁。
寫(xiě)法一:(?<!\.)\d\.\d+$
表示從小數(shù)點(diǎn)左邊匹配。
image.png
寫(xiě)法二:^\d+\.(?!\.)\d+$
表示從小數(shù)點(diǎn)右邊匹配谷炸。
image.png
結(jié)合上面兩種寫(xiě)法北专,就可以總結(jié)出小數(shù)點(diǎn)的左右兩邊都不能再有小數(shù)點(diǎn)的寫(xiě)法:\d(?<!\..*)\.(?!.*\.)
實(shí)例
下面整理了幾個(gè)常用的正則寫(xiě)法,往后再慢慢補(bǔ)充旬陡。
正則 | 解釋 |
---|---|
^1[3-9]\d{9}$ |
匹配手機(jī)號(hào)碼拓颓。以1開(kāi)頭的九位純數(shù)字,第二位為3到9數(shù)字描孟。 |
((25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)\.){3}(25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)\:\d.+$ |
匹配IP地址和端口 |
((25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)\.){3}(25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d) |
匹配IP地址驶睦,注意IP的地址的取值區(qū)間,具體寫(xiě)法參考: https://www.cnblogs.com/FashionDoo/p/10685631.html |
^(http(s)?:\/\/)\w+[^\s]+(\.[^\s]+){1,}[\/] |
匹配域名地址匿醒,http://xxx.xxx.xxx.xx/ |
^(http(s)?:\/\/)\w+[^\s]+(\.[^\s]+){1,}[\/].+ |
匹配url地址场航,http://xxx.xxx.xxx.xx/xxx |
[1-9][0-9,X]{14,17} |
匹配身份證號(hào)碼 |
\n\s*\r |
匹配空白行 |
^\s*|\s*$ |
匹配首尾的空格 |
\b[kK][eE][yY]\b |
匹配私鑰key字符 |
\w+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+) |
匹配郵箱 |
[a-zA-Z]:[\\/]{1,2}(?:[a-zA-Z0-9\.\-_ ]+[\\/]{1,2})*([a-zA-Z0-9\.\-_ ]+) |
匹配windows絕對(duì)地址 |
參考資料
https://regexr-cn.com/
https://tool.oschina.net/regex/#
https://www.codejiaonang.com/#/course/regex_chapter1/0/7
https://ihateregex.io/