我有一些带有前缀和后缀的记录(可能会也可能不会)。
我试图找出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
答案 0 :(得分:4)
在这里试试这个
REGEXP_REPLACE(num,'^(00|\+)?(\d*)(\@.*)?$','\2')
在此处查看online at Regexr
我不确定Oracle正则表达式能够做什么。关键点可以是\d
,表示数字,如果不起作用,请将\d
替换为[0-9]
。
(?:)
是非捕获组。内部模式不存储在捕获组中,因此您始终可以替换第一个捕获组\1
在非捕获组之后,我还使用|
更改了使用?
的可选部分。 “OR”中的两个括号导致结果有时在组1中(当第一个选项匹配时),有时在组2中(当第二个选项匹配时)