如何仅匹配非嵌套括号内的字符组?
匹配单层级括号内字符链的正则问题
我最近在写正则表达式,想要实现的效果是:只匹配被单个左右括号包裹的字符链——也就是说,括号内部不能再嵌套任何括号。举几个实际测试的例子:
ab(ab)ac→ 应该匹配出ab(ab)ndn→ 应该匹配出abab(ab(ac)an)→ 应该匹配不到任何内容(括号内存在嵌套括号)ab((ab)ab)ab→ 匹配不到任何内容ab(ab(abb))ab→ 匹配不到任何内容ab(ab(ab(ab))ab)→ 匹配不到任何内容
我目前写的正则还存在问题,像第三行这种嵌套括号的情况居然还是会被匹配到,实在搞不清楚哪里出了问题。
解决方案:
问题出在之前的正则可能允许括号内出现其他括号,我们需要明确限制括号内的字符不能是左括号或右括号。可以使用这个正则表达式:
\(([^()]+)\)
正则解释:
\(:匹配左括号(转义是因为括号在正则里是特殊字符)[^()]+:匹配至少一个不是左括号也不是右括号的字符,这样就彻底避免了嵌套括号的情况\):匹配右括号
用这个正则去测试上面的例子,前两行能准确提取出ab,后面所有存在嵌套括号的行都不会匹配到任何内容,完全符合需求。
内容的提问来源于stack exchange,提问作者tbop
相关产品推荐
相关产品推荐

