我在Oracle 11.2.0.3.0 / Toad for Oracle 11.6.1.6中使用以下查询:
select regexp_replace('000010PARA197427'
,'([0-9]*)([A-Z]*)([0-9]*)'
,'\3-\2-\1') from dual
而不是达到我的预期,197427-PARA-000010
。
我得到了197427-PARA-000010--
。
如果我将查询更改为:
select regexp_replace('000010PARA197427'
,'([0-9]*)([A-Z]*)([0-9]*)'
,'\3-c\2-c\1') from dual
然后我得到197427-cPARA-c000010-c-c
的结果。
它就像所有的文字都被附加到结果的末尾。
非常感谢任何帮助。
答案 0 :(得分:4)
不确定为什么会发生这种情况,但由于你只有*
量词而没有锚定,所以你可能会得到一个空的匹配(或类似的东西)。
锚定模式(/^...$/
)似乎有效。对任何量词使用+
而不是*
也适用于此示例。
SQL> select regexp_replace('000010PARA197427'
,'([0-9]+)([A-Z]*)([0-9]*)'
,'\3-\2-\1') foo from dual ;
FOO
------------------
197427-PARA-000010
SQL> select regexp_replace('000010PARA197427'
,'^([0-9]*)([A-Z]*)([0-9]*)$'
,'\3-\2-\1') foo from dual ;
FOO
------------------
197427-PARA-000010