regex 使用postgresql拆分正则表达式,返回结果和分隔符

20jt8wwn  于 2023-10-22  发布在  PostgreSQL
关注(0)|答案(1)|浏览(130)

我使用的是Postgres,服务器版本14.8,我想解析一个字符串,返回位于regexp字符串和分隔符之间的字符串。
通常在Java、Perl等语言中,我会使用反向引用来获取分隔符,但我不确定如何使用Postgres SQL。
下面是我使用函数regexp_split_to_table得到的结果:
正则表达式:'[(.+?)]'

select regexp_split_to_table('IF [Cost_1]=0 THEN ''[$0]'' ELSEIF [Cost_2]>0 AND [Cost_1]<=100 THEN ''[$1,$100]'' ELSE ''[$0]'' END', '\[(.+?)\]');

和输出:

regexp_split_to_table 
-----------------------
 IF 
 =0 THEN '
 ' ELSEIF 
 >0 AND 
 <=100 THEN '
 ' ELSE '
 ' END
(7 rows)

但我想要的是这样的东西,其中包括分隔符,交错:

regexp_split_to_table
-----------------------
 IF
 [Cost_1]
 =0 THEN '
 [$0]
 ' ELSEIF
 [Cost_2]
 >0 AND
 [Cost_1]
 <=100 THEN '
 [$1,$100]
' ELSE '
 [$0]
' END
(13 rows)

使用此函数或14.8中可用的任何其他Postgresql函数,我如何做到这一点?
谢谢安东尼

wz1wpwve

wz1wpwve1#

看看这个链接,postgresql: regexp_split_to_table - how to split text by delimiters,这个变体工作:

select regexp_split_to_table(
       replace(
        replace('IF [Cost_1]=0 THEN ''[$0]'' ELSEIF [Cost_2]>0 AND [Cost_1]<=100 THEN ''[$1,$100]'' ELSE ''[$0]'' END',  '[', E'\001[')
    , ']', E']\001')
  ,E'\001');

相关问题