使用Oracle从字符串中提取电子邮件地址

时间:2013-11-21 21:00:27

标签: sql regex oracle

我正在尝试从字符串中提取电子邮件地址。大多数条目具有类似的结构,例如:

From: John Doe Sent:Monday, October 10, 2013 11:59 AM
To: '**xyz123@yahoo.com**'Cc:mno456@comcast.net (the lack of spaces is intentional)

另一方面,有些格式不同,即不包括抄送:等等。目标是提取到:电子邮件地址,即 xyz123 @ yahoo .com 在我们的例子中。

我尝试过使用INSTRSUBSTR,但运气不佳。有没有办法使用RegEx提取这个电子邮件地址,或者是否有人有任何其他想法。

2 个答案:

答案 0 :(得分:1)

试试这个:

SELECT Trim( both '*' from Trim( both '''' from
       Substr( eml,
          instr( eml, 'To:' ) + 4,
          CASE WHEN instr( eml, 'Cc:' ) > 0
          THEN instr( eml, 'Cc:' ) - ( instr( eml, 'To:' ) + 4 )
          ELSE 1000 END
       )))
FROM emails;

演示 - > http://www.sqlfiddle.com/#!4/5f181/5

答案 1 :(得分:0)

这将是这种形式:

select
     Ltrim(regexp_substr(column_name,'To:''[[:alpha:]][[:alnum:]]*.?[[:alnum:]]*@[[:alpha:]][[:alnum:]]*[.][[:alpha:]]+''',1,1),'To:')
from
     table_name;

当然正在做出假设(例如只有一个收件人)。人们需要使用交替运算符来涵盖人们可能遇到的其他形式。

关于我的正则表达式:

字母字符类+字母数字字符类(零或更多)+句点(零或1)+字母数字字符类(零或更多)@ +字母字符类+字母数字字符类(零或更多)