示例
输入字符串:OUT for GLE gle gle. single mingle ringle 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 for XXXXX XXXXX gle. sin XXXXX min XXXXX rin XXXXX asdf XXXXX XXXXX ret XXXXX
预期输出:OUT for XXXXX XXXXX XXXXX. single mingle ringle asdfgle gleret XXXXX
问题:它将gle
替换为普通单词(例如:single mingle ringle
),我不希望在单词的一部分中替换该模式
答案 0 :(得分:1)
您需要找到“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, ...., ...., ), ...., ....) ....