Oracle REGEXP_REPLACE处理含特殊字符字符串的问题求助
Oracle正则替换问题解决方案
问题场景
需要将格式为_$deleted$73$0这类包含特殊字符的字符串替换为I01,执行以下SQL语句后结果不符合预期:
SQL> select REGEXP_REPLACE('_$deleted$73$0 RRR SSS','_\$deleted\$+?','I01') from dual ; REGEXP_REPLACE('_$DE -------------------- I0173$0 RRR SSS
实际输出为I0173$0 RRR SSS,但期望输出是I01 RRR SSS。
解决方法
调整正则表达式,匹配整个目标字符串(从_$deleted$开始到空格前的所有内容),修正后的SQL如下:
SELECT REGEXP_REPLACE('_$deleted$73$0 RRR SSS', '_\$deleted\$[^ ]+', 'I01') FROM dual;
执行后将得到预期结果:I01 RRR SSS。
原因说明
原正则表达式_\$deleted\$+?仅匹配了_$deleted$部分,未包含后面的73$0;调整后的_\$deleted\$[^ ]+中,[^ ]+会匹配_$deleted$之后直到空格为止的所有字符,确保整个目标串被完全替换。
内容的提问来源于stack exchange,提问作者user9599919
相关产品推荐
相关产品推荐

