匹配平衡組

2021-08-31 13:58:11 字數 647 閱讀 6565

reference:

匹配一般是指左側符號與右側符號兩兩出現,例如 「[」 與 「]」, 「<「與」>」, 或者""

但是左右符號可能有內嵌,正規表示式通過寫入堆疊,推出堆疊來正確匹配左右符號

例如:

a+(b*(c+d))/e+f-(g/(h-i))*j
匹配第乙個左右符號"()"

我們先匹配左側 「(」

隨後對中間字串逐一讀取:

乙個中間字元他有3種情況,

再次出現乙個"("字元

出現乙個非"(「非」)"的字元

出現乙個")「字元

對情況1)儲存,且寫入堆疊,

對情況2)儲存

對請況3)儲存, 且寫出堆疊

直到堆疊為空,且遇到乙個右側」)"

匹配全部完成

語法 (?(groupname)(?!)) 來表示堆疊不為空(無法一一對應)時整個表示式不匹配。

其實這個不加對於好的字串沒有任何影響,平衡組自動會匹配。但是對於「壞」的字串,就需要這個表示式來要求正規表示式

整個正規表示式如下:

\(

( (?\()

| [^()]+

)* (?(g)(?!))

\)

匹配平衡組 , 匹配括號組

這裡介紹的平衡組語法是由.net framework支援的 其它語言 庫不一定支援這種功能,或者支援此功能但需要使用不同的語法。有時我們需要匹配像 100 50 15 這樣的可巢狀的層次性結構,這時簡單地使用 則只會匹配到最左邊的左括號和最右邊的右括號之間的內容 這裡我們討論的是貪婪模式,懶惰模式也...

平衡組 遞迴匹配

有時我們需要匹配像 100 50 15 這樣的可巢狀的層次性結構,這時簡單地使用 則只會匹配到最左邊的左括號和最右邊的右括號之間的內容 這裡我們討論的是貪婪模式,懶惰模式也有下面的問題 假如原來的字串裡的左括號和右括號出現的次數不相等,比如 5 3 2 那我們的匹配結果裡兩者的個數也不會相等。有沒有...

正規表示式之平衡組 遞迴匹配 巢狀匹配

以下轉個我認為很有用的東西 有時我們需要匹配像 100 50 15 這樣的可巢狀的層次性結構 這時簡單地使用 則只會匹配到最左邊的左括號和最右邊的右括號之間的內容 這裡我們討論的是貪婪模式,懶惰模式也有下面的問題 假如原來的字串裡的左括號和右括號出現的次數不相等,比如 5 3 2 那我們的匹配結果裡...