业务开发需要把SQL转成Array,在匹配()时,遇到括号里还有括号的情况。
原有的正则是这样写的
/\([^\)]+\)/
当出现括号里还有括号的情况,字段数据解析错误。
经过寻找,有一种正则的递归写法,叫Recursive pattern,关键字?R。
举个例子
/a(?R)*/ 表示/a(正则本身(正则本身).....)*/,也就等于/a(a(a).....)*/表示连续多个a
回到括号问题上,我们把正则改成
/\(([^()]|(?R))*\)/
问题完美解决。