【发布时间】:2013-04-19 10:24:29
【问题描述】:
Oracle 的正则表达式有问题。我在不同的桌子上有很多电话号码。现在我的任务是统一它们。所以我去掉了所有的空格、下划线、减号等等。但随后棘手的部分来了 - 一开始似乎很容易。
有带和不带国际代码的数字,例如0046812345678 和 0812345678。所以我想用“0046”替换一个(!)前导零。我认为^0(?=[1-9]) 会完成这项工作,但甲骨文似乎认为前瞻是无用的。
(^0)(1|2|3|4|5|6|7|8|9) 也不起作用(或 (^01|02|03|04|05|06|07|08|09) 就此而言),因为它将替换第一个非零数字以及将 0812345678 变为 004612345678(因此,第一个“8”消失了)。
我已经搜索并尝试了很长时间,但无法提供更多可能性。任何帮助将不胜感激。提前致谢!
【问题讨论】:
-
我不了解oracle,但通常可以参考替换字符串中的捕获组。例如,模式
^0([1-9])和替换0046$1或0046\1或其他东西。 -
作为另一项改进,您可以尝试
^0([0-9]{9})$并替换为'0046\1' -
@shyam 这可能太严格了……电话号码的长度可以变化很大。
-
@m.buettner 好的。我只是想解决一个事实,即
0也可以是电话号码其余部分的一部分......因此长度限制
标签: regex oracle phone-number