以下两个查询给出了一些输出,
Select REGEXP_REPLACE('Milind,Milind,Gopal,Gopal,Gopal,Milind'), '([^,]+) (,\1)+(,|$)', '\1\3') "OUTPUT"
FROM dual;
o/p Milind,Gopal,Milind
Select REGEXP_REPLACE('Milind,Milind,Gopal,Gopal,Gopal,Milind'), '([^,]+) (,\1+)(,|$)', '\1\3') "OUTPUT"
FROM dual;
o/p Milind,Gopal,Gopal,Milind
我不了解工作流程。它如何提供输出。 谁能帮我解释一下。
答案 0 :(得分:1)
[^,]
匹配一个字符,该字符可以是逗号以外的任何字符。例如:M
。
[^,]+
匹配除逗号以外的任何字符1次或多次。例如:Milind
([^,]+)
相同,但是捕获了结果,因此以后可以使用\1
进行引用。
(,\1)+
与一个逗号匹配,并与前一个捕获匹配一次或多次,然后将结果捕获为\2
。如果\1
是Milind
,则可以匹配:,Milind
或,Milind,Milind
或,Milind,Milind,Milind
,等等。
(,|$)
匹配逗号或行尾,并将其捕获为\3
。
\1\3
是替换模式:我们仅保留\1
和\3
,因此捕获\2
中匹配的所有内容均被有效删除。
第二条语句显示了一个小差异,该错误引入了一个错误:
(,\1+)
匹配逗号,然后是前一个捕获的一个或多个出现,如,Milind
或,MilindMilind
或,MilindMilindMilind
中所示。结果,它无法删除多个逗号分隔的事件。