使用oracle正则表达式删除前缀和后缀

时间:2011-08-09 09:31:42

标签: regex string oracle

我有一些带有前缀和后缀的记录(可能会也可能不会)。 我试图找出REGEXP_REPLACE总是会给我一个参数化的值。

到目前为止,我的尝试是:

with teste as (
select '+123145@domain.com' as num from dual
union
select '0054321@domain.com' as num from dual
union
select '006789' as num from dual
union
select '+9876' as num from dual
union
select '13579@domain.com' as num from dual
union
select '123456789' as num from dual
)
select REGEXP_REPLACE(num,'^00(.*)\@.*$|^\+(.*)\@.*$','\1') from teste

但并不完全存在。

输出应该是:

num
12345
54321
6789
9876
13579
123456789

1 个答案:

答案 0 :(得分:4)

在这里试试这个

REGEXP_REPLACE(num,'^(00|\+)?(\d*)(\@.*)?$','\2')

在此处查看online at Regexr

我不确定Oracle正则表达式能够做什么。关键点可以是\d,表示数字,如果不起作用,请将\d替换为[0-9]

(?:)是非捕获组。内部模式不存储在捕获组中,因此您始终可以替换第一个捕获组\1

在非捕获组之后,我还使用|更改了使用?的可选部分。 “OR”中的两个括号导致结果有时在组1中(当第一个选项匹配时),有时在组2中(当第二个选项匹配时)