今天看到一个问题,要求匹配多层成对括号的内容,比如:(((520+480)38/10)/2((520+480)*38/10)/2))
这个问题是匹配嵌套的问题
1、有的正则表达式引擎,专门针对这种嵌套提供了支持。并且在栈空间允许的情况下,能够支持任意未知层次的嵌套:比如 Perl,PHP,GRETA 等。在 PHP 和 GRETA 中,表达式中使用 "(?R)" 来表示嵌套部分。
匹配嵌套了未知层次的 "小括号对" 的表达式写法如下:\( ([^()] | (?R))* \)
2、对于不支持嵌套正则的情况,还有个思路是写一个只能匹配最内层的正则:\([^()]*\),取出内容替换后再递归取最内层,直到取完所有的括号内容