我在检查了这个主题后来到这里: 包含加号和小数的正则表达式
我的主要问题如下,我有错误的迁移数据需要修复。对于电话号码,我们有一些字母和特殊字符需要删除。
例如,想象一下这将是数据:
s#sdads+#09232342a
我只想得到 + 和数字 + 必须是可选的。
http://www.techonthenet.com/oracle/functions/regexp_substr.php https://docs.oracle.com/cd/B19306_01/appdev.102/b14251/adfns_regexp.htm
如果我从 oracle 阅读文档,这应该很容易,但我不能让它工作,我一定缺少一些基本的东西。任何想法?
下面是我尝试过的一些示例:
select regexp_substr('s#sdads+#09232342a','\+*[0-9]+') from dual;
返回
09232342
我期待它考虑 + 我也尝试将 + 放在测试字符串的开头并且没有区别。将正则表达式更改为
[\+]*[0-9]+ or [+]*[0-9]+ or (\+)*(\d)+
结果没有区别。
让我感到困惑的部分是,如果我更改测试字符串和正则表达式,则返回 + 并且只有加号
select regexp_substr('+s#sdads+#09232342a','?[\+]*') from dual;
但是如果我将+移出开头就消失了
如果我把数字放在那里,也只考虑数字:
select regexp_substr('+s#sdads+#09232342a','?[\+]*(\d)+') from dual;
这也不起作用:
select regexp_substr('+s#sdads+#09232342a','?[\+]{0,1}(\d)+') from dual;