oracle中如何用正则表达式按照顺序替换某个固定的表达式?
现有一个字符串公式str:='ZB0001+ZB0202-ZB0103*ZB2004/ZB0095'我想用正则表达式替换里面的ZB*变为:str:='100+200-30...
现有一个字符串公式
str := 'ZB0001+ZB0202-ZB0103*ZB2004/ZB0095'
我想用正则表达式替换里面的ZB*变为:str := '100+200-300*400/500'
也就是没替换一次就将替换的次数*100,例如:ZB0001 → 100、ZB0202 → 200
这个语句里面”??“应当怎么写呢?
select regexp_replace('ZB0001+ZB0202-ZB0103*ZB2004/ZB0095','ZB[0-9]{4}',100*??) from dual; 展开
str := 'ZB0001+ZB0202-ZB0103*ZB2004/ZB0095'
我想用正则表达式替换里面的ZB*变为:str := '100+200-300*400/500'
也就是没替换一次就将替换的次数*100,例如:ZB0001 → 100、ZB0202 → 200
这个语句里面”??“应当怎么写呢?
select regexp_replace('ZB0001+ZB0202-ZB0103*ZB2004/ZB0095','ZB[0-9]{4}',100*??) from dual; 展开
2个回答
展开全部
with tmp as
(select 'ZB0001+ZB0202-ZB0103*ZB2004/ZB0095' as str from dual)
select listagg(str) within group(order by 1)
from (select regexp_replace(regexp_substr(str,
'ZB[0-9]{4}.{0,1}',
1,
level),
'ZB[0-9]{4}',
100 * level) as str
from tmp
connect by level <= regexp_count(str, 'ZB[0-9]{4}.{0,1}'))
展开全部
select regexp_replace('ZB0001+ZB0202-ZB0103*ZB2004/ZB0095','ZB[[:digit:]]{3}([[:digit:]])','\100') from dual
===
100+200-300*400/500
===
100+200-300*400/500
更多追问追答
追问
多谢您的回答,这个写法应该是巧合,我的意思是每次都将替换的此时*100,而您的这个只是后面拼接了两个0而已,相对应的,如果我要实现这个语句呢:
替换一次就将替换的次数+2
ZB0001 → 3、ZB0202 → 4
追答
把两个00换成+2就行了。不过我想不出你这个问题的实际意义,建议换个思路。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询