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) <> '';
逻辑说明
- 正则表达式:
(.*?)(\[.+?\]|$)(.*?):非贪婪匹配任意字符,捕获分隔符之前的内容(第一组)(\[.+?\]|$):匹配目标分隔符[xxx]或者字符串结尾,捕获分隔符本身(第二组)- 附加
'g'标志开启全局匹配,确保遍历整个字符串的所有匹配片段
- regexp_matches:返回所有匹配结果,每行是包含两个元素的数组(非分隔符内容 + 分隔符/结尾空串)
- unnest:将数组元素拆分为独立行
- WHERE过滤:剔除空字符串,避免字符串结尾产生的空行
执行后会得到交错排列的非分隔符内容和分隔符本身,完全符合你期望的13行结果。
内容的提问来源于stack exchange,提问作者Ant
相关产品推荐
相关产品推荐

