在Oracle的正则表达式中前瞻

时间:2013-04-19 10:24:29

标签: regex oracle phone-number

我的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 个答案:

答案 0 :(得分:6)

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

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

结果:0046812345678