用于电子邮件的 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 结果的条件规则