正则表达式里面最难的就是匹配对应的括号.设计的到入栈出栈问题:
- (?'group') 把捕获的内容命名为group,并压入堆栈(Stack)
- (?'-group') 从堆栈上弹出最后压入堆栈的名为group的捕获内容,如果堆栈本来为空,则本分组的匹配失败
- (?(group)yes|no) 如果堆栈上存在以名为group的捕获内容的话,继续匹配yes部分的表达式,否则继续匹配no部分
例子为小括号,组名为Open,碰到左括号,入栈一个"Open",碰到右括号,出栈一个"Open",如果全部出栈就结束.
大家可以试一下下面的小括号是否可以.
\([^()]*(((?'Open'\()[^()]*)+((?'-Open'\))[^()]*)+)*\)
大家还可以试试for循环中的大括号
for\s*\(.*?\)\s*\{[^{}]*(((?'Open'\{)[^{}]*)+((?'-Open'\})[^{}]*)+)*\}