首页 > 解决方案 > REGEX 通过 SQL DB2 获取所有匹配的模式

问题描述

全部。我需要通过正则表达式从字符串中提取所有与模式“TTT\d{3}”匹配的内容

对于示例中的字符串,我想得到:

TTT108,TTT109,TTT111,TTT110

我想使用的 DB2 函数是REGEXP_REPLACE(str,'REGEX pattern', ',').

每个字符串的匹配数可以是 0,1,2,3...。

谢谢你。

这个例子:

TTT108(optional);TTT109(optional);TTT111(optional);TTT110optional);ENTITYLIST_2=(optional);ENTITYLIST_3=(optional);Containment_Status=(optional)

标签: sqldb2

解决方案


如果您想提取有效字符而不是替换无效字符,请检查这是否有帮助:

with data (s) as (values
('TTT108(optional);TTT109(optional);TTT111(optional);TTT110optional);ENTITYLIST_2=(optional);ENTITYLIST_3=(optional);Containment_Status=(optional)')
)
select listagg(sst,', ') within group (order by n)
from (
select n,
       regexp_substr(s,'(TTT[0-9][0-9][0-9])', 1, n)
from   data
cross  join (values (1),(2),(3),(4),(5)) x (n) -- any numbers table
where  n <= regexp_count(s,'(TTT[0-9][0-9][0-9])')
) x (n,sst)

推荐阅读