Regexp_replace和regexp_like用于电子邮件

时间:2017-11-24 10:51:49

标签: plsql regexp-replace regexp-like

我使用此正则表达式来提取电子邮件:

regexp_replace(xxx, '.*=([A-Za-z0-9._%-]*@[A-Za-z0-9._%-]*\.[A-Za-z]{2,4}).*','\1')
regexp_like(xxx,'=+[A-Za-z0-9._%-]+@[A-Za-z0-9._%-]+\.[A-Za-z]{2,4}')

我可以像这样提取字符串:

select regexp_replace('/AAA-SSS-CCC?User=testmail@mail.com?Id=12323424','.*=([A-Za-z0-9._%-]*@[A-Za-z0-9._%-]*\.[A-Za-z]{2,4}).*','\1')

输出:testmail@mail.com

但我不能像这样提取字符串:

select regexp_replace('/AAA/SSS/CCC/testmail@mail.com?Id=12323424','.*=([A-Za-z0-9._%-]*@[A-Za-z0-9._%-]*\.[A-Za-z]{2,4}).*','\1')

输出:/AAA/SSS/CCC/testmail@mail.com?Id=12323424

我该怎么做?

感谢。

1 个答案:

答案 0 :(得分:0)

试试这个。我在@出现之前修改了要匹配的模式。它匹配@以外的任何字符的一个或多个匹配项,匹配/

SELECT REGEXP_REPLACE (
          '/AAA/SSS/CCC/testmail@mail.com?Id=12323424',
          '^([^@]+)@[A-Za-z0-9._%-]*\.[A-Za-z]{2,4}.*',
          '\1')
  FROM DUAL;