电子邮件服务提供商的正则表达式

时间:2017-04-05 16:30:11

标签: sql regex oracle

我正在使用Oracle 11.g.我想创建一个虚拟列,以便我可以从电子邮件地址中找到电子邮件服务提供商。例如,我希望新列显示基于包含“john.smith@verizon.net”的eMailAddress列的“verizon.net”我想我需要一个正则表达式来查找eMailAddress中“@”之后的所有内容柱。我不认为11.g支持前瞻。我如何为此构造正则表达式? 谢谢你看这个。

Select regexp_substr(email_address, '@([[:alnum:]]+\.?){1,2}/?') 
From mail_recipient 
Where prim_key = 1;

生成虚拟列的实际代码如下:

Alter Table mail_recipient
  Add (EMAIL_PROVIDER VARCHAR2(4000 BYTE)
    Generated Always As 
    (regexp_substr(email_address, '@([[:alnum:]]+\.?){1,2}/?')) VIRTUAL);

1 个答案:

答案 0 :(得分:1)

因此,在一些反馈迭代之后,这就解决了OP问题:

 '@([[:alnum:]_-]+(\.[[:alnum:]_-]+){0,})'
  • 匹配更多"紧密"减少广泛的回溯
  • 另外允许" [_-]"
  • 另外允许任何数量的" .blabla"