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

Oracle SQL拆分字符串时保留分隔符的实现方法

Oracle SQL 实现保留分隔符的字符串拆分

你之前使用的正则[^+]+仅匹配非分隔符的连续内容,会自动过滤掉分隔符本身,无法满足操作数、分隔符逐行单独输出的要求。正确实现的核心是调整正则匹配规则,将「连续非分隔符的操作数」和「单个分隔符」都作为独立匹配单元,结合层级查询即可得到预期结果。

可直接运行的实现代码

适配你给出的测试场景(Oracle环境,基于connect by层级查询):

SELECT TRIM(regexp_substr('D*(A+B)-(C+A)*(C+A)', '([^+\-/*)(]+|[+\-/*)(])', 1, level)) AS split_result
FROM dual
CONNECT BY regexp_substr('D*(A+B)-(C+A)*(C+A)', '([^+\-/*)(]+|[+\-/*)(])', 1, level) IS NOT NULL;

正则逻辑说明

匹配规则([^+\-/*)(]+|[+\-/*)(])通过或逻辑|覆盖两类需要输出的内容:

  • [^+\-/*)(]+:匹配连续的、不在分隔符集合+-/*)(内的字符,即所有操作数内容
  • [+\-/*)(]:匹配任意单个属于分隔符集合的字符,即所有需要单独成行的运算符、括号
  • 外层嵌套TRIM函数用于过滤输入首尾可能存在的空白字符、换行符导致的空匹配行

运行结果

执行上述SQL后输出和预期完全一致:

split_result
------------
D
*
(
A
+
B
)
-
(
C
+
A
)
*
(
C
+
A
)

调整说明

如果后续需要修改分隔符集合,只需要同步更新正则两个方括号内的分隔符列表即可。注意-在正则方括号内有表示字符范围的特殊含义,需要添加转义符\,避免正则解析出错。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 18:57:24