我对Oracle的正则表达式有疑问。我在不同的表中有很多电话号码。现在,我的任务是统一它们。因此,我删除了所有空白,下划线,负号和其他内容。但是,棘手的部分来了-一开始似乎很容易。

有带国际代码和不带国际代码的数字,例如0046812345678和0812345678。所以我想用'0046'替换以零开头的单个(!)。我以为^0(?=[1-9])可以胜任工作,但Oracle似乎认为先行是没有用的。
(^0)(1|2|3|4|5|6|7|8|9)也不会执行任何操作(或就此而言,(^01|02|03|04|05|06|07|08|09)),因为它将替换第一个非零数字,并将0812345678替换为004612345678(因此,第一个“ 8”消失了)。

我已经搜索并尝试了一段时间,无法找到更多的可能性。任何帮助将不胜感激。提前致谢!

最佳答案

您需要将第一个1-9加到结果中,以便仅匹配以单个0开头的数字。为了保留第一个1-9,我们捕获了它(使用括号)并将其添加到替换部分(使用\1)。这似乎可行:

select regexp_replace('0812345678', '^0([1-9])', '0046\1') from dual;


结果:0046812345678

09-11 20:24