当前位置: 代码迷 >> Oracle开发 >> 替换字符串的正则表达式01!01.01!01.01.01变成01.02!01.02.01!01.02.01.01
  详细解决方案

替换字符串的正则表达式01!01.01!01.01.01变成01.02!01.02.01!01.02.01.01

热度:320   发布时间:2016-04-24 06:37:42.0
求一个替换字符串的正则表达式01!01.01!01.01.01变成01.02!01.02.01!01.02.01.01
本帖最后由 kmonkey 于 2014-08-25 16:15:37 编辑
数据是这个形式的01!01.01!01.01.01
现在要求把每个!号之间的字符串的第一个01替换成01.02
替换后的格式如下01.02!01.02.01!01.02.01.01
------解决方案--------------------
利用!拆分,分别处理,然后再进行合并

select replace(
  wmsys.wm_concat(substr(str,1,instr(str,'01')-1)
------解决方案--------------------
'01.02'
------解决方案--------------------
substr(str,instr(str,'01')+2))
  ,',','!') str
from
  (select REGEXP_SUBSTR('01!01.01!01.01.01', '[^!]+', 1, LEVEL) STR
  from dual
  CONNECT BY LEVEL <= REGEXP_COUNT('01!01.01!01.01.01', '!') + 1)

------解决方案--------------------
如果!后紧跟着就是01就好办了,那样的话不需要正则
substr(replace('!'
------解决方案--------------------
字段名,'!01','!01.02'),2)
------解决方案--------------------
引用:
注意这个01!01.01!01.01.01是动态,可能是01!01.01!01.01.01!01.01.01.01,可能还更长


SELECT REGEXP_REPLACE('01!01.01!01.01.01','(^01
------解决方案--------------------
!01)','\1.02') FROM DUAL;