4

我对 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”消失)。

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

4

1 回答 1

6

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

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

结果: 0046812345678

于 2013-04-19T10:34:33.910 回答