Sql 模式匹配并替换为regexp\u replace
范例 输入字符串:Sql 模式匹配并替换为regexp\u replace,sql,oracle,Sql,Oracle,范例 输入字符串:OUT用于GLE。单混合环asdfgle gleret GLE 执行下面的udpate语句 update TICKET set desription_Modified = regexp_replace(desription_Modified, ' GLE | GLE|GLE ', ' XXXXX ',1,0,'i' ) where issue_key='ad'; 当前替换:OUT用于XXXXX XXXXX。sin XXXXX min XXXXX rin XXXXX asdf
OUT用于GLE。单混合环asdfgle gleret GLE
执行下面的udpate语句
update TICKET
set desription_Modified = regexp_replace(desription_Modified, ' GLE | GLE|GLE ', ' XXXXX ',1,0,'i' )
where issue_key='ad';
当前替换:OUT用于XXXXX XXXXX。sin XXXXX min XXXXX rin XXXXX asdf XXXXX XXXXX ret XXXXX
预期输出:输出为XXXXX XXXXX XXXXX。单混合环asdfgle gleret XXXXX
问题:它将替换普通单词中的
gle
(如:单混合环
),我不希望在该模式属于单词时替换该模式您需要查找“gle”的出现,该模式的前后都是非单词字符和/或字符串的开头或结尾
with
inputs ( str ) as (
select 'OUT for GLE gle gle. single mingle ringle asdfgle gleret GLE' from dual
)
select regexp_replace(str, '(\W|^)gle(\W|$)', '\1XXXXX\2', 1, 0, 'i') as new_str
from inputs
;
NEW_STR
-------------------------------------------------------------------
OUT for XXXXX gle XXXXX. single mingle ringle asdfgle gleret XXXXX
但仔细看看输出:仍然有一个gle。这是因为它前面的空格也是字符串中第一个GLE后面的空格;该空间已在第一个匹配中使用,因此无法重复使用以查找第二个匹配
我所知道的处理这种情况的唯一解决方案是,根据第一次调用的结果,再次调用同一个函数
select regexp_replace(regexp_replace str, ...., ...., ), ...., ....) ....