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, ...., ....,   ), ...., ....)  ....