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

PostgreSQL 14.8如何拆分正则并同时返回分隔符与结果

解决PostgreSQL 14.8中拆分字符串同时保留分隔符的问题

要实现拆分字符串时同时返回[xxx]格式的分隔符和分隔符之间的内容并交错排列,不能直接用regexp_split_to_table(该函数仅返回拆分后的内容),可以通过regexp_matches配合全局匹配+unnest函数实现:

实现语句

SELECT unnest(match) AS result
FROM regexp_matches(
    'IF [Cost_1]=0 THEN ''[$0]'' ELSEIF [Cost_2]>0 AND [Cost_1]<=100 THEN ''[$1,$100]'' ELSE ''[$0]'' END',
    '(.*?)(\[.+?\]|$)',
    'g'
) AS match
WHERE unnest(match) <> '';

逻辑说明

  1. 正则表达式:(.*?)(\[.+?\]|$)
    • (.*?):非贪婪匹配任意字符,捕获分隔符之前的内容(第一组)
    • (\[.+?\]|$):匹配目标分隔符[xxx]或者字符串结尾,捕获分隔符本身(第二组)
    • 附加'g'标志开启全局匹配,确保遍历整个字符串的所有匹配片段
  2. regexp_matches:返回所有匹配结果,每行是包含两个元素的数组(非分隔符内容 + 分隔符/结尾空串)
  3. unnest:将数组元素拆分为独立行
  4. WHERE过滤:剔除空字符串,避免字符串结尾产生的空行

执行后会得到交错排列的非分隔符内容和分隔符本身,完全符合你期望的13行结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 12:35:15