2017-05-11 5 views
-1

パターンマッチングとREGEXP_REPLACE

入力文字列に置き換えます。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

問題:そのは通常の言葉(のような:single mingle ringle)からgleを交換する単語

答えて

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に続くスペースでもあるためです。そのスペースは最初の試合ですでに使用されているため、2度目の試合を見つけるために再利用することはできません。

私が知っている唯一の解決策は、この種の状況に対処するために、最初の呼び出しの結果で同じ関数を2回呼び出すことです。

select regexp_replace(regexp_replace str, ...., ...., ), ...., ....) .... 
関連する問題