C 正規表示式 匹配

2021-05-24 09:19:22 字數 1597 閱讀 9834

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

為了避免( 和/( 把你的大腦徹底搞糊塗,我們還是用尖括號代替圓括號吧。現在我們的問題變成了如何把xx aa> yy 這樣的字串裡,最長的配對的尖括號內的內容捕獲出來?

這裡需要用到以下的語法構造:

01<                         #最外層的左括號

02[^<>]*                #最外層的左括號後面的不是括號的內容

03(

04(

05(?'open'<)    #碰到了左括號,在黑板上寫乙個"open"

06[^<>]*       #匹配左括號後面的不是括號的內容

07)+

08(

09(?'-open'>)   #碰到了右括號,擦掉乙個"open"

10[^<>]*        #匹配右括號後面不是括號的內容

11)+

12)*

13(?(open)(?!))         #在遇到最外層的右括號前面,判斷黑板上還有沒有沒擦掉的"open";如果還有,則匹配失敗

14

15>                         #最外層的右括號

1]*>[^<>]*(((?'open']*>)[^<>]*)+((?'-open'

)[^<>]*)+)*(?(open)(?!))

正規表示式 匹配

字串 void abtr quint32 ab 表示乙個正規表示式 template class bidirectionaliterator class allocator std allocator sub match bidirectionaliterator class match resul...

正規表示式匹配

請實現乙個函式用來匹配包括 和 的正規表示式。模式中的字元 表示任意乙個字元,而 表示它前面的字元可以出現任意次 包含0次 在本題中,匹配是指字串的所有字元匹配整個模式。例如,字串 aaa 與模式 a.a 和 ab ac a 匹配,但是與 aa.a 和 ab a 均不匹配 解法 首先要想到用遞迴處理...

正規表示式匹配

請實現乙個函式用來匹配包括 和 的正規表示式。模式中的字元 表示任意乙個字元,而 表示它前面的字元可以出現任意次 包含0次 在本題中,匹配是指字串的所有字元匹配整個模式。例如,字串 aaa 與模式 a.a 和 ab ac a 匹配,但是與 aa.a 和 ab a 均不匹配 class solutio...