正则表达式里面最难的就是匹配对应的括号.设计的到入栈出栈问题:

  • (?'group') 把捕获的内容命名为group,并压入堆栈(Stack)
  • (?'-group') 从堆栈上弹出最后压入堆栈的名为group的捕获内容,如果堆栈本来为空,则本分组的匹配失败
  • (?(group)yes|no) 如果堆栈上存在以名为group的捕获内容的话,继续匹配yes部分的表达式,否则继续匹配no部分

例子为小括号,组名为Open,碰到左括号,入栈一个"Open",碰到右括号,出栈一个"Open",如果全部出栈就结束.

大家可以试一下下面的小括号是否可以.

\([^()]*(((?'Open'\()[^()]*)+((?'-Open'\))[^()]*)+)*\)

 

大家还可以试试for循环中的大括号

 

 for\s*\(.*?\)\s*\{[^{}]*(((?'Open'\{)[^{}]*)+((?'-Open'\})[^{}]*)+)*\} 

 

posted on 2017-10-10 14:46  曹万军  阅读(6916)  评论(0编辑  收藏  举报