Postgresql正则表达式与半冒号

时间:2017-03-21 16:36:33

标签: regex postgresql

我想使用正则表达式从字段中拆分字符串值。 以下是我的问题

mydatabase=> SELECT regexp_replace('a1=1,2;B2b=2,3,4;C3c={3,4,5;4,5,6};D4d={4,5,6;7,8,9}', 
                                   '([^0-9]|^)([=.*])(?=;|$)', '\1 \2', 'g');

   regexp_replace                    
------------------------------------------------------
 a1=1,2;B2b=2,3,4;C3c={3,4,5;4,5,6};D4d={4,5,6;7,8,9}
(1 row)

但我希望得到如下结果

mydatabase=>YOUR_ANSER_QUERY

regexp_replace
------------------
a1=1
B2b=2,3,4
C3c={3,4,5;4,5,6}
D4d={4,5,6;7,8,9}
(4 rows)

2 个答案:

答案 0 :(得分:0)

括号内有分号。为了逃避它们,我添加了(?![0-9]) a negative look-ahead so specified pattern not exist.将它们分成表格

这应该这样做:

SELECT  regexp_split_to_table( 'a1=1,2;B2b=2,3,4;C3c={3,4,5;4,5,6};D4d={4,5,6;7,8,9}', ',?[1-2]?(;(?![0-9]))');

答案 1 :(得分:0)

我在http://regexr.com

使用了在线正则表达替换验证程序

要搜索的正则表达式是([^=]+)=(\{[^\}]+\}|[^;]+)(?:;|$) 要替换的正则表达式是$1=$2\r

对于输入字符串,他们会提供所需的结果。

请注意,此验证程序需要$符号(+数字)来表示捕获组。