在没有递归或平衡组的情况下匹配嵌套括号
挑战:
可以使用正则表达式,例如Java的java.util.regex中的那些,可以在不依赖递归或平衡组的情况下匹配任意嵌套的括号?
解决方案:
是的,可以使用前向引用:
(?=\()(?:(?=.*?\((?!.*?)(.*\)(?!.*).*))(?=.*?\)(?!.*?)(.*)).)+?.*?(?=)[^(]*(?=$)
工作原理:
此表达式由多个前瞻和前向引用组成,它们共同识别嵌套的括号组:
示例:
以下字符串将匹配三个嵌套组:
(F(i(r(s)t))) ((S)(e)((c)(o))(n)d) (((((((Third)))))))
匹配内部组:
要匹配内部组,可以添加捕获组到表达式末尾:
(?=\()(?=((?:(?=.*?\((?!.*?)(.*\)(?!.*).*))(?=.*?\)(?!.*?)(.*)).)+?.*?(?=)[^(]*(?=$)))
以上是正则表达式可以在没有递归或平衡组的情况下匹配嵌套括号吗?的详细内容。更多信息请关注PHP中文网其他相关文章!