Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Regexp#u replace:从'+';Oracle中的dilimited字符串_Sql_Regex_Oracle - Fatal编程技术网

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