Sql Regexp#u replace:从'+';Oracle中的dilimited字符串
我在表列中有一个由“+”分隔的字符串。我需要删除重复项 说明: 我的数据:Sql Regexp#u replace:从'+';Oracle中的dilimited字符串,sql,regex,oracle,Sql,Regex,Oracle,我在表列中有一个由“+”分隔的字符串。我需要删除重复项 说明: 我的数据: a+a+a+b+b+c+c 期望: a+b+c 我尝试使用REGEXP\u REPLACE,但无法转义+字符,因为它是保留的 我成功地使用了逗号分隔值,但需要+或?分隔值方面的帮助 使用逗号分隔值的工作代码: SELECT REGEXP_REPLACE ('a,a,a,b,b,c,c', '([^,]+)(,\1)+', '\1') FROM DUAL; 只要逃离+: SELECT REGEXP_REPLACE
a+a+a+b+b+c+c
期望:
a+b+c
我尝试使用REGEXP\u REPLACE
,但无法转义+
字符,因为它是保留的
我成功地使用了逗号
分隔值,但需要+
或?
分隔值方面的帮助
使用逗号分隔值的工作代码:
SELECT REGEXP_REPLACE ('a,a,a,b,b,c,c', '([^,]+)(,\1)+', '\1') FROM DUAL;
只要逃离+:
SELECT REGEXP_REPLACE ('a+a+a+b+b+c+c', '([^\+]+)(\+\1)+', '\1') FROM DUAL;
如果需要使用保留字符作为其正常值,则需要使用反斜杠对其进行转义。这适用于所有保留字符
\
您可以通过将正则表达式中的每个逗号替换为
\+
例如:
SELECT REGEXP_REPLACE('a+a+a+b+b+c+c', '([^\+]+)(\+\1)+', '\1') FROM DUAL;
你试过逃跑吗?比如:('a+a+a+b+b+c+c','([^\+]+)(+\1)+','\1')@marco你忘了一个逗号:
([^\+]+)(\+\1)+
谢谢Paul,我已经更正了工作。。谢谢:)重复项不连续时,此正则表达式不起作用。如果您有ba+a
,它也不起作用,因为它将匹配ba
中的a
,并删除应保留的唯一a
术语。您需要使用反斜杠,而不是正斜杠来转义。我更正它:)关于a+b+b+c+b+a+c
?或者ba+a
?