【发布时间】:2014-08-24 20:17:53
【问题描述】:
我有一个包含诸如“String1...String2...”等值的字符串。我正在尝试使用 Oracle 内置的 regexp_replace 将这些值替换为“StringA...StringB”等。我已经完成了正则表达式模式来查找字符串,并且可以分别引用模式的两个部分,如替换字符串争论中的 \1-----\2 所示:
with d as (select '<PatFactors><String1>0</String1><String2>0</String2><String3>0</String3><String4>0</String4><String5>0</String5><String6>0</String6><String7>0</String7><String8>0</String8><String9>0</String9><String10>0</String10><String11>0</String11><String12>0</String12><String13>0</String13><String14>0</String14><String15>0</String15><String16>0</String16><String17>0</String17><String18>0</String18><String19>0</String19><String20>0</String20><String21>0</String21><String22>0</String22><String23>0</String23><String24>0</String24><String25>0</String25><String26>0</String26><String27>0</String27><String28>0</String28><String29>0</String29><String30>0</String30></PatFactors>' as o_requestdata
from dual)
select regexp_replace(o_requestdata, '([Ss]tring)([0-9]+)', '\1-----\2'/*||chr(ascii('A')-1+to_number('\2'))*/ ) from d;
我想要做的是保留反向引用 \1,然后将 \2 传递给一个表达式,就像被注释掉的那个。不幸的是,如果我取消对此部分的注释,则会出现无效数字错误。
有谁知道是否可以像这样对反向引用执行操作,或者除了对每个值进行 30 次直接替换之外,您还能想到其他替代方法吗?
【问题讨论】:
标签: regex oracle plsql oracle11g