C#正則表達式 匹配

  有時我們需要匹配像( 100 * ( 50 + 15 ) )這樣的可嵌套的層次性結構 ,這時簡單地使用\(.+\) 則只會匹配到最左邊的左括號和最右邊的右括號之間的內容(這裏我們討論的是貪婪模式,懶惰模式也有下面的問題)。假如原來的字符串裏的左括號和右括號出現的次數不相等,比如( 5 / ( 3 + 2 ) ) ) ,那我們的匹配結果裏兩者的個數也不會相等。有沒有辦法在這樣的字符串裏匹配到最長的,配對的括號之間的內容呢?
  爲了避免( 和\( 把你的大腦徹底搞糊塗,我們還是用尖括號代替圓括號吧。現在我們的問題變成了如何把xx aa> yy 這樣的字符串裏,最長的配對的尖括號內的內容捕獲出來?
  這裏需要用到以下的語法構造: (?'group') 把捕獲的內容命名爲group,並壓入[b]堆棧(Stack) [/b]
  (?'-group') 從堆棧上彈出最後壓入堆棧的名爲group的捕獲內容,如果堆棧本來爲空,則本分組的匹配失敗
  (?(group)yes|no) 如果堆棧上存在以名爲group的捕獲內容的話,繼續匹配yes部分的表達式,否則繼續匹配no部分
  (?!) 零寬負向先行斷言,由於沒有後綴表達式,試圖匹配總是失敗
  13 (?(Open)(?!)) #在遇到最外層的右括號前面,判斷黑板上還有沒有沒擦掉的"Open";如果還有,則匹配失敗
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章