You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何仅匹配非嵌套括号内的字符组?

匹配单层级括号内字符链的正则问题

我最近在写正则表达式,想要实现的效果是:只匹配被单个左右括号包裹的字符链——也就是说,括号内部不能再嵌套任何括号。举几个实际测试的例子:

  • ab(ab)ac → 应该匹配出 ab
  • (ab)ndn → 应该匹配出 ab
  • ab(ab(ac)an) → 应该匹配不到任何内容(括号内存在嵌套括号)
  • ab((ab)ab)ab → 匹配不到任何内容
  • ab(ab(abb))ab → 匹配不到任何内容
  • ab(ab(ab(ab))ab) → 匹配不到任何内容

我目前写的正则还存在问题,像第三行这种嵌套括号的情况居然还是会被匹配到,实在搞不清楚哪里出了问题。

解决方案:

问题出在之前的正则可能允许括号内出现其他括号,我们需要明确限制括号内的字符不能是左括号或右括号。可以使用这个正则表达式:

\(([^()]+)\)

正则解释:

  • \(:匹配左括号(转义是因为括号在正则里是特殊字符)
  • [^()]+:匹配至少一个不是左括号也不是右括号的字符,这样就彻底避免了嵌套括号的情况
  • \):匹配右括号

用这个正则去测试上面的例子,前两行能准确提取出ab,后面所有存在嵌套括号的行都不会匹配到任何内容,完全符合需求。

内容的提问来源于stack exchange,提问作者tbop

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 09:07:00