该问题的关键是判断括号或花括号是否成对匹配的问题,在
正则表达式中的解决手段是平衡组,语法如下:
(?<group>) 把捕获的内容命名为group,并压入
堆栈(?<-group>) 从堆栈上弹出最后压入堆栈的名为group的捕获内容,如果堆栈本来为空,则本分组的匹配失败
(?(group)yes|no) 如果堆栈上存在以名为group的捕获内容的话,继续匹配yes部分的表达式,否则继续匹配no部分
(?!) 顺序否定环视,由于没有
后缀表达式,试图匹配总是失败
举例:
源
字符串:a+(b*(c+d))/e+f-(g/(h-i))*j
正则表达式:((?<Open>\()|(?<−Open>)|[^()])*(?(Open)(?!))\)
需求说明:匹配成对出现的()中的内容
输出:(b*(c+d)) 和 (g/(h-i))