正則表達(dá)式基礎(chǔ)到高階(語法)

正則表達(dá)式基礎(chǔ)到高階(語法)


元字符

元字符 說明
. 匹配除換行符以外的任意字符
\w 匹配字母或數(shù)字或下劃線或漢字
\s 匹配任意的空白符
\d 匹配數(shù)字
\b 匹配單詞的開始或結(jié)束
^ 匹配字符串的開始
$ 匹配字符串的結(jié)束

反義

語法 說明
\W 匹配任意不是字母,數(shù)字,下劃線,漢字的字符
\S 匹配任意不是空白符的字符
\D 匹配任意非數(shù)字的字符
\B 匹配不是單詞開頭或結(jié)束的位置
[^x] 匹配除了x以外的任意字符
[^aeiou] 匹配除了aeiou這幾個(gè)字母以外的任意字符

重復(fù)模式

語法 說明
* 重復(fù)零次或更多次
+ 重復(fù)一次或更多次
? 重復(fù)零次或一次
{n} 重復(fù)n次
{n,} 重復(fù)n次或更多次
{n,m} 重復(fù)n到m次

貪婪與懶惰

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

分組

語法 說明
(exp) 分組
(?<groupname>exp) 分組命名
(?:exp) 匹配exp,不捕獲匹配的文本,也不給此分組分配組號(hào)

后向引用

要匹配 taobao taobao , home home 這樣的情況如果處理?
\b(\w+)\b\s+\1\b\1表示引用分組1 (\w+)
\b(?<Word>\w+)\b\s+\k<Word>\bk<Word>表示引用分組名Word (?<Word>\w+)

零寬斷言

語法 說明
?=exp 零寬度正預(yù)測先行斷言,自身出現(xiàn)的位置的后面能匹配表達(dá)式exp
?<=exp 零寬度正回顧后發(fā)斷言,自身出現(xiàn)的位置的前面能匹配表達(dá)式exp

負(fù)向零寬斷言

語法 說明
?!exp 零寬度負(fù)預(yù)測先行斷言,自身出現(xiàn)的位置的后面不能匹配表達(dá)式exp
?<!exp 零寬度負(fù)回顧后發(fā)斷言,自身出現(xiàn)的位置的前面不能匹配表達(dá)式exp

平衡組/遞歸匹配

目前C#提供了支持

(?'group') 把捕獲的內(nèi)容命名為group,并壓入堆棧(Stack)
(?'-group') 從堆棧上彈出最后壓入堆棧的名為group的捕獲內(nèi)容,如果堆棧本來為空,則本分組的匹配失敗
(?(group)yes|no) 如果堆棧上存在以名為group的捕獲內(nèi)容的話,繼續(xù)匹配yes部分的表達(dá)式,否則繼續(xù)匹配no部分
(?!) 零寬負(fù)向先行斷言,由于沒有后綴表達(dá)式,試圖匹配總是失敗

#如何把xx <aa <bbb> <bbb> aa> yy這樣的字符串里,最長的配對(duì)的尖括號(hào)內(nèi)的內(nèi)容捕獲出來?


<                         #最外層的左括號(hào)
    [^<>]*                #最外層的左括號(hào)后面的不是括號(hào)的內(nèi)容
    (
        (
            (?'Open'<)    #碰到了左括號(hào),在黑板上寫一個(gè)"Open"
        |
            (?'-Open'>)   #碰到了右括號(hào),擦掉一個(gè)"Open"

        |    #匹配右括號(hào)后面不是括號(hào)的內(nèi)容
   [^<>]*
        )+
    )*
    (?(Open)(?!))         #在遇到最外層的右括號(hào)前面,判斷黑板上還有沒有沒擦掉的"Open";如果還有,則匹配失敗

>                         #最外層的右括號(hào)

處理選項(xiàng)(RegexOptions)

語法 說明
IgnoreCase 匹配時(shí)不區(qū)分大小寫
Multiline 更改^和$的含義,使它們分別在任意一行的行首和行尾匹配,而不僅僅在整個(gè)字符串的開頭和結(jié)尾匹配。(在此模式下,$的精確含意是:匹配\n之前的位置以及字符串結(jié)束前的位置.)
Singleline 更改.的含義,使它與每一個(gè)字符匹配(包括換行符\n)
IgnorePatternWhitespace 忽略表達(dá)式中的非轉(zhuǎn)義空白并啟用由#標(biāo)記的注釋
ExplicitCapture 僅捕獲已被顯式命名的組

整理自Parry Qiu的正則表達(dá)式視頻教程

?著作權(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),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 正則表達(dá)式到底是什么東西?字符是計(jì)算機(jī)軟件處理文字時(shí)最基本的單位,可能是字母,數(shù)字,標(biāo)點(diǎn)符號(hào),空格,換行符,漢字等...
    獅子挽歌閱讀 2,271評(píng)論 0 9
  • 轉(zhuǎn)載自正則表達(dá)式30分鐘入門教程 入門 學(xué)習(xí)正則表達(dá)式的最好方法是從例子開始,理解例子之后再自己對(duì)例子進(jìn)行修改,實(shí)...
    夏天的風(fēng)_song閱讀 1,956評(píng)論 0 0
  • 注:本篇文章只為方便查看,特此保留,如有冒犯,敬請(qǐng)諒解!?。?本文目標(biāo) 30分鐘內(nèi)讓你明白正則表達(dá)式是什么,并對(duì)它...
    阿杰Alex閱讀 1,557評(píng)論 0 10
  • 參考文章 正則表達(dá)式30分鐘入門教程 學(xué)習(xí)之前 學(xué)習(xí)之前,先安裝一個(gè)Mac上用的軟件,來測試你的正則表達(dá)式是否正確...
    劉大帥閱讀 4,071評(píng)論 2 36
  • 人生若只如初見,該多好。 初見里,你如陽光般溫暖,記憶中,上下交錯(cuò)的電梯,那是第一次看到你的臉,而我,只是...
    mona不會(huì)飛閱讀 387評(píng)論 0 0

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