正则表达式匹配对称小括号


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

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

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

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

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

 

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

 

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

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM