正则表达式从字符串返回特定模式

时间:2015-09-18 07:56:33

标签: regex oracle

我是oracle正则表达式的初学者。我有以下字符串

'Critical fix ;,DI 2.2.1 new fixes , DI 2.2.2 maintenance plan , DI 3.2.1 new patch'

从上面的字符串我想使用regexp_substr获得如下输出。

DI 2.2.1,DI 2.2.2,DI 3.2.1

有问题的字符串可以有多次出现(DI x.x.x)并使用正则表达式它应该返回一个命令分隔字符串,如输出中所述。 请帮忙

2 个答案:

答案 0 :(得分:1)

可能的解决方案:

select regexp_replace(B, '(.*DI\s\S+)(,.*$)', '\1')
from
(
select regexp_replace(A, '(.*?)(DI\s\S+)', '\2,') B
from
(
select 'Critical fix ;,DI 2.2.1 new fixes , DI 2.2.2 maintenance plan , DI 3.2.1 new patch' A
from dual
)
)

首先在regexp_replace(A, '(.*?)(DI\s\S+)', '\2,') B的帮助下,我们会移除大部分非DI\s\S+文字,并在每个DI...阻止后添加逗号。

DI 2.2.1,DI 2.2.2,DI 3.2.1, new patch

其次,在regexp_replace(B, '(.*DI\s\S+)(,.*$)', '\1')的帮助下,我们删除了最后一个逗号和尾随文本。

DI 2.2.1,DI 2.2.2,DI 3.2.1

答案 1 :(得分:0)

正如评论者所说,你所尝试过的一个例子会有所帮助。嗯,这是我能够根据你的问题得到的。

使用此模式DI \ s \ S +

在此处查看演示https://regex101.com/r/kO2cZ1/4

为了能够检测所有事件,请确保使用/ m。它使您能够匹配字符串中的所有匹配项。