PostgreSQL中的正则表达式排除

问题描述 投票:1回答:2

我必须在','上的PostgreSQL中拆分一些字符串,但不要在'\,'上拆分(反斜杠是转义字符)。例如,regexp_split_to_array('123,45,67\,89', ???)必须将字符串拆分为数组{123, 45, "67\,89"}

已经做了什么:E'(?<!3),''3'一起作为逃脱角色。但是我如何使用反斜杠而不是3呢?

不起作用:

E'(?<!\),'根本没有拆分字符串

E'(?<!\\),'抛出错误“圆括号()不平衡”

E'(?<!\ ),'(有空间)分裂所有',',包括'\,'

E'(?<!\\ ),'(有空间)也分裂在所有','上。

regex postgresql
2个回答
4
投票

文本前面的字母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'(?<!\\\\),'));

0
投票

您还可以先将其拆分为组:

(\ d +),(\ d + \,\ d +)?

(稍后用逗号连接它们)

© www.soinside.com 2019 - 2024. All rights reserved.