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

如何移除嵌套括号内的所有内容?SQL正则表达式问题求助

移除SQL文本中所有嵌套括号内的内容

普通的REGEXP_REPLACE正则只能匹配单层括号,无法处理嵌套结构,要实现完全移除嵌套括号内的内容,需要根据你使用的SQL方言选择不同方案:

方案1:PostgreSQL(支持递归正则)

PostgreSQL的POSIX正则支持递归模式,可以直接用递归正则匹配所有嵌套括号:

SELECT REGEXP_REPLACE('(aaa) bbb (ccc (ddd) / eee)', '\((?:[^()]|(?R))*\)', '', 'g');

正则说明:

  • \(:匹配左括号
  • (?:[^()]|(?R))*:匹配非括号字符,或者递归整个正则模式(处理嵌套的括号结构)
  • \):匹配右括号
  • 'g':全局替换所有匹配项,最终得到结果bbb

方案2:MySQL(无递归正则支持,用自定义函数)

MySQL的正则引擎不支持递归,需要通过循环替换的自定义函数实现:

DELIMITER //
CREATE FUNCTION RemoveNestedParentheses(str TEXT) RETURNS TEXT
BEGIN
    DECLARE temp TEXT;
    SET temp = str;
    -- 循环替换所有单层括号,直到没有括号残留
    WHILE REGEXP_LIKE(temp, '\\([^()]*\\)') DO
        SET temp = REGEXP_REPLACE(temp, '\\([^()]*\\)', '');
    END WHILE;
    RETURN temp;
END //
DELIMITER ;

-- 调用函数
SELECT RemoveNestedParentheses('(aaa) bbb (ccc (ddd) / eee)');

这个函数会反复移除文本中的单层括号,每次替换后原本的外层嵌套括号会变成单层,直到所有括号及内部内容都被清除,最终返回bbb。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 22:45:31