regex - Oracle 正则表达式中的前瞻

标签 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-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/

相关文章:

php - 使用 RegEx 将抓取限制为 X 个字符 + 其他规范

RegEx小写字母和连字符

html - 如何标记电话号码?

sql - 针对特定情况有好的解决方案吗?我的选择查询看起来很愚蠢。 :))

android - 如何通过 xamarin c# 在 android 中添加具有多个电话号码的联系人?

java - 使用正则表达式模式的电话号码类别

c++ - regex_match 和 regex_search 之间的区别?

Javascript - 使用 REGex 列出所有 whitepaces 索引

c# - Oracle 数据访问 ORA-06512 : character string buffer too small

oracle - 保存Grails域对象时如何选择oracle current_timestamp