我在 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
作为结果。
这就像所有的文字都被附加到结果的末尾。
如有任何帮助,我们将不胜感激。
最佳答案
不确定为什么会发生这种情况,但由于您只有 *
量词并且没有锚定,所以您可能得到一个空匹配(或类似的东西)。
锚定模式 (/^...$/
) 似乎有效。对任何量词使用 +
而不是 *
也适用于此示例。
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
关于sql - Regexp_replace 添加额外的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26848919/