我必须在','
上的PostgreSQL中拆分一些字符串,但不要在'\,'
上拆分(反斜杠是转义字符)。例如,regexp_split_to_array('123,45,67\,89', ???)
必须将字符串拆分为数组{123, 45, "67\,89"}
。
已经做了什么:E'(?<!3),'
与'3'
一起作为逃脱角色。但是我如何使用反斜杠而不是3呢?
不起作用:
E'(?<!\),'
根本没有拆分字符串
E'(?<!\\),'
抛出错误“圆括号()不平衡”
E'(?<!\ ),'
(有空间)分裂所有','
,包括'\,'
E'(?<!\\ ),'
(有空间)也分裂在所有','
上。
文本前面的字母E
表示C字符串,然后必须转义两次,一个用于C字符串,一个用于正则表达式。
尝试使用和不使用E
:
regexp_split_to_array('123,45,67\,89', '(?<!\\),')
regexp_split_to_array('123,45,67\,89', E'(?<!\\\\),')
这里http://rextester.com/VEE84838是一个运行的例子(unnest()
只是逐行显示结果):
select unnest(regexp_split_to_array('123,45,67\,89', '(?<!\\),'));
select unnest(regexp_split_to_array('123,45,67\,89', E'(?<!\\\\),'));
您还可以先将其拆分为组:
(\ d +),(\ d + \,\ d +)?
(稍后用逗号连接它们)