正則表達式里面最難的就是匹配對應的括號.設計的到入棧出棧問題:
- (?'group') 把捕獲的內容命名為group,並壓入堆棧(Stack)
- (?'-group') 從堆棧上彈出最后壓入堆棧的名為group的捕獲內容,如果堆棧本來為空,則本分組的匹配失敗
- (?(group)yes|no) 如果堆棧上存在以名為group的捕獲內容的話,繼續匹配yes部分的表達式,否則繼續匹配no部分
例子為小括號,組名為Open,碰到左括號,入棧一個"Open",碰到右括號,出棧一個"Open",如果全部出棧就結束.
大家可以試一下下面的小括號是否可以.
\([^()]*(((?'Open'\()[^()]*)+((?'-Open'\))[^()]*)+)*\)
大家還可以試試for循環中的大括號
for\s*\(.*?\)\s*\{[^{}]*(((?'Open'\{)[^{}]*)+((?'-Open'\})[^{}]*)+)*\}