鍍金池/ 教程/ C/ 后向引用
后向引用
零寬斷言
如何寫(xiě)出高效率的正則表達(dá)式
平衡組/遞歸匹配
字符轉(zhuǎn)義
元字符
測(cè)試正則表達(dá)式
什么是正則表達(dá)式
重復(fù)
貪婪與懶惰
字符類
常用正則表達(dá)式
詳細(xì)語(yǔ)法
表達(dá)式全集
處理選項(xiàng)
負(fù)向零寬斷言
反義
分枝條件
注釋
分組
入門(mén)

后向引用

使用小括號(hào)指定一個(gè)子表達(dá)式后,匹配這個(gè)子表達(dá)式的文本(也就是此分組捕獲的內(nèi)容)可以在表達(dá)式或其它程序中作進(jìn)一步的處理。默認(rèn)情況下,每個(gè)分組會(huì)自動(dòng)擁有一個(gè)組號(hào),規(guī)則是:從左向右,以分組的左括號(hào)為標(biāo)志,第一個(gè)出現(xiàn)的分組的組號(hào)為 1,第二個(gè)為 2,以此類推。

后向引用用于重復(fù)搜索前面某個(gè)分組匹配的文本。例如,\1 代表分組 1 匹配的文本。難以理解?請(qǐng)看示例:

\b(\w+)\b\s+\1\b可以用來(lái)匹配重復(fù)的單詞,像 go go, 或者 kitty kitty。這個(gè)表達(dá)式首先是一個(gè)單詞,也就是單詞開(kāi)始處和結(jié)束處之間的多于一個(gè)的字母或數(shù)字(\b(\w+)\b),這個(gè)單詞會(huì)被捕獲到編號(hào)為 1 的分組中,然后是 1 個(gè)或幾個(gè)空白符(\s+),最后是分組 1 中捕獲的內(nèi)容(也就是前面匹配的那個(gè)單詞)(\1)。

你也可以自己指定子表達(dá)式的組名。要指定一個(gè)子表達(dá)式的組名,請(qǐng)使用這樣的語(yǔ)法:(?<Word>\w+)(或者把尖括號(hào)換成'也行:(?'Word'\w+)),這樣就把\w+的組名指定為 Word 了。要反向引用這個(gè)分組捕獲的內(nèi)容,你可以使用\k<Word>,所以上一個(gè)例子也可以寫(xiě)成這樣:\b(?<Word>\w+)\b\s+\k<Word>\b。

使用小括號(hào)的時(shí)候,還有很多特定用途的語(yǔ)法。下面列出了最常用的一些:

表4.常用分組語(yǔ)法
分類 代碼/語(yǔ)法 說(shuō)明
捕獲 (exp) 匹配exp,并捕獲文本到自動(dòng)命名的組里
(?<name>exp) 匹配exp,并捕獲文本到名稱為name的組里,也可以寫(xiě)成(?'name'exp)
(?:exp) 匹配exp,不捕獲匹配的文本,也不給此分組分配組號(hào)
零寬斷言 (?=exp) 匹配exp前面的位置
(?<=exp) 匹配exp后面的位置
(?!exp) 匹配后面跟的不是exp的位置
(?<!exp) 匹配前面不是exp的位置
注釋 (?#comment) 這種類型的分組不對(duì)正則表達(dá)式的處理產(chǎn)生任何影響,用于提供注釋讓人閱讀

我們已經(jīng)討論了前兩種語(yǔ)法。第三個(gè)(?:exp)不會(huì)改變正則表達(dá)式的處理方式,只是這樣的組匹配的內(nèi)容不會(huì)像前兩種那樣被捕獲到某個(gè)組里面,也不會(huì)擁有組號(hào)?!拔覟槭裁磿?huì)想要這樣做?”——好問(wèn)題,你覺(jué)得為什么呢?

上一篇:字符轉(zhuǎn)義下一篇:分枝條件