在Oracle的正则表达式中前瞻

use*_*686 4 regex oracle phone-number

我对Oracle的正则表达式有疑问.我在不同的表格中有很多电话号码.现在我的任务是统一他们.所以我拿出所有的空白,下划线,弊端等等.但接下来是棘手的部分 - 起初看起来很容易.

有和没有国际代码的数字,例如0046812345678和0812345678.所以我想用'0046'替换单个(!)前导零.我认为这样^0(?=[1-9])做会有所作为,但Oracle似乎认为前瞻是没用的. 因为它会取代第一个非零数字以及将0812345678变成004612345678(因此,第一个'8'消失),所以(^0)(1|2|3|4|5|6|7|8|9)也不会做任务(或者(^01|02|03|04|05|06|07|08|09)就此而言).

我现在搜索并尝试了很长时间,但却无法想出更多的可能性.任何帮助将不胜感激.提前致谢!

Kla*_*äck 6

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

select regexp_replace('0812345678', '^0([1-9])', '0046\1') from dual;
Run Code Online (Sandbox Code Playgroud)

结果: 0046812345678