用于电子邮件的 Regexp_replace 和 regexp_like

Posted

技术标签:

【中文标题】用于电子邮件的 Regexp_replace 和 regexp_like【英文标题】:Regexp_replace and regexp_like for Email 【发布时间】:2018-05-08 09:01:18 【问题描述】:

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

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】:

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

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

【讨论】:

以上是关于用于电子邮件的 Regexp_replace 和 regexp_like的主要内容,如果未能解决你的问题,请参考以下文章

将 regexp_replace 连接到 listagg:结果太长(SQL 错误:ORA-01489)

regexp_replace 和 regexp_substr 变量的比较

bigquery 中 regexp_replace 结果的条件规则

Postgresql regexp_replace() 反斜杠和双引号

大查询 REGEXP_REPLACE 文本转整数

Postgresql 中的 REGEXP_REPLACE 不是子字符串