正則表達(dá)式

常用元字符

元字符 說(shuō)明 備注
. 匹配除換行符以外的任意字符 無(wú)
\w 匹配字母或數(shù)字或下劃線或漢字 相當(dāng)于[_a-z0-9A-Z]</br>匹配n個(gè)字符: \w{n}
\s 匹配任意的空白符 無(wú)
\d 匹配數(shù)字 匹配數(shù)字個(gè)數(shù)區(qū)間: \d{lower, upper}
\b 匹配單詞的開(kāi)始或結(jié)束 無(wú)
^ 匹配字符串的開(kāi)始 無(wú)
$ 匹配字符串的結(jié)束 無(wú)

反義

元字符 說(shuō)明
\W 匹配任意不是字母,數(shù)字,下劃線,漢字的字符
\S 匹配任意不是空白符的字符
\D 匹配任意非數(shù)字的字符
\B 匹配不是單詞開(kāi)頭或結(jié)束的位置
[^x] 匹配除了x以外的任意字符

常用限定符

限定符 說(shuō)明 備注
* 重復(fù)零次或更多次 不代表任何字符,僅代表數(shù)量;</br>匹配0~n多個(gè)連續(xù)字符: \w*
+ 重復(fù)一次或更多次 無(wú)
? 重復(fù)零次或一次 代表某一個(gè)位置可有可無(wú)
{n} 重復(fù)n次 無(wú)
{n,} 重復(fù)n次或更多次 無(wú)
{n,m} 重復(fù)n到m次 無(wú)

分枝條件 ‘|’

相當(dāng)于或的意思,如“\d{5}-\d{4}|\d{5}”,可以匹配12345-1234,也可以匹配12345;特別需要注意的是,如果反過(guò)來(lái)寫(xiě)
“\d{5}|\d{5}-\d{4}”的話,只能匹配前5個(gè)了,因?yàn)槠ヅ湟?guī)則從左到右,左側(cè)規(guī)
則匹配上就不會(huì)管右側(cè)了

分組 ‘()’

分組用圓括號(hào)代表,所以不是分組的話,用到括號(hào)的地方需要轉(zhuǎn)義;
分組主要用于把同個(gè)匹配規(guī)則,重復(fù)多次

例:

ip地址簡(jiǎn)單配,匹配規(guī)則就是1~3位數(shù)組加“.”,重復(fù)4次

(\d{1,3}\.){4}

捕獲

使用分組()后,會(huì)自動(dòng)為它分配一個(gè)組號(hào),從1、2、3....,可以利用組號(hào)再表達(dá)式中繼續(xù)匹配操作

常用限定符

分類(lèi) 語(yǔ)法 說(shuō)明
自動(dòng)捕獲 (exp) 匹配exp,并捕獲文本到自動(dòng)命名組號(hào),1、2、3...
自定義組名 (?<name>exp) 匹配exp,并捕獲文本到名稱為name的組里,也可以寫(xiě)成(?'name'exp)
不自動(dòng)分配組名 (?:exp) 匹配exp,不捕獲匹配的文本,也不給此分組分配組號(hào)(應(yīng)該沒(méi)啥用)

例:匹配連個(gè)連續(xù)一樣的字符

\b(\w+)\b\s+\1\b
\1代表(\b(\w+)\b)匹配出來(lái)的結(jié)果,整個(gè)表達(dá)式就是要匹配連續(xù)出現(xiàn)2個(gè)相同連續(xù)的字符串

捕獲可以指定名稱,不用自動(dòng)生成的組號(hào),指定名字‘Result’來(lái)改造:

\b(?<Result>\w+)\b\s+\k<Result>\b

斷言

分類(lèi) 語(yǔ)法 說(shuō)明
零寬度正預(yù)測(cè)先行斷言 (?=exp) 匹配exp前面的位置
零寬度正回顧后發(fā)斷言 (?<=exp) 匹配exp后面的位置
零寬度負(fù)預(yù)測(cè)先行斷言 (?!exp) 匹配后面跟的不是exp的位置
零寬度負(fù)回顧后發(fā)斷言 ((?<!exp)) 匹配前面不是exp的位置
  • 用于斷定某些位置會(huì)出現(xiàn)哪些字符,但是結(jié)果中不會(huì)包含被斷定的這些內(nèi)容;
  • (?=exp)只能放開(kāi)頭,(?<=exp)只能放結(jié)尾
樣本:"I'm singing while you're dancing"
規(guī)則:\b\w+(?=ing)
結(jié)果:sing和danc

樣本:"reading a book"
規(guī)則:(?<=\bre)\w+\b
結(jié)果:ading
  • 負(fù)向零寬斷言本身不占匹配位置,只是確保會(huì)出現(xiàn)哪些字符
樣本:"Iraq fighting"
規(guī)則:\b\w*q[^u]\w*\b
結(jié)果:Iraq fighting

想要確定q后面不能緊跟著u,但是以上沒(méi)做到,應(yīng)該用以下規(guī)則
規(guī)則:\b\w*q(?!u)\w*\b


規(guī)則:(?<![a-z])\d{7}
作用: 匹配前面不是小寫(xiě)字母的七位數(shù)字

注釋

小括號(hào)的另一種用途是通過(guò)語(yǔ)法(?#comment)來(lái)包含注釋。例如:2[0-4]\d(?#200-249)|25[0-5](?#250-255)|[01]?\d\d?(?#0-199)

貪婪與懶惰模式

樣本:"aabab"
規(guī)則:a.*b
結(jié)果:aabab

==為什么不是“aab”、“ab”?==

默認(rèn)是貪婪模式,盡可能匹配更多的字符。
如果改寫(xiě)成

樣本:"aabab"
規(guī)則:a.*?b
結(jié)果:aabab

加上?就會(huì)變成懶惰模式,匹配盡可能少的字符

語(yǔ)法 說(shuō)明
*? 重復(fù)任意次,但盡可能少重復(fù)
+? 重復(fù)1次或更多次,但盡可能少重復(fù)
?? 重復(fù)0次或1次,但盡可能少重復(fù)
{n,m}? 重復(fù)n到m次,但盡可能少重復(fù)
{n,}? 重復(fù)n次以上,但盡可能少重復(fù)

由于不常用容易忘記,所以記錄下;本文主要用于自己忘記的時(shí)候快速才看規(guī)則,如果想比較快速系統(tǒng)的學(xué)習(xí)正則表達(dá)式,可以到這里正則表達(dá)式30分鐘入門(mén)教程學(xué)習(xí),作者寫(xiě)的很不錯(cuò),我在不同時(shí)間段總共看了第三遍了,忘了看看了忘,每次都有收獲

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容