我的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'消失)。
我现在搜索并尝试了一段时间,但却无法想出更多的可能性。任何帮助将不胜感激。提前谢谢!
答案 0 :(得分:6)
您需要将第一个1-9添加到结果中,以便仅匹配以单个0
开头的数字。为了保留前1-9,我们捕获它(使用括号)并将其添加到替换部分(使用\1
)。这似乎有效:
select regexp_replace('0812345678', '^0([1-9])', '0046\1') from dual;
结果:0046812345678