我遇到了 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-9 添加到结果中,以便只匹配以单个 0
开头的数字。为了保留第一个 1-9,我们捕获它(使用括号)并将其添加到替换部分(使用 \1
)。这似乎有效:
select regexp_replace('0812345678', '^0([1-9])', '0046\1') from dual;
结果:
0046812345678
关于regex - Oracle 正则表达式中的前瞻,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16102471/