如何在ruby中的3个主要电子邮件客户端中使用名称和电子邮件进行正则表达式?

时间:2012-02-11 22:02:16

标签: ruby regex

我以为我已经弄清楚了,但看起来我的正则表达式仍然有怪癖。基本上我想使用相同的正则表达式模式来匹配以下主要电子邮件客户端(Gmail,Yahoo和常规电子邮件):

"Brian Mang" <brian.mang@email.com>   -- Case1
Brian Mang (brian.mang@email.com)     -- Case2
<brian.mang@email.com>                -- Case3
brian.mang@email.com                  -- Case4

我有以下正则表达式模式:

/[\W"]*(?<name>.*?)[\"]*?\s*[<(](?<email>\w.*)[>)]/.match(contact)

并且它适用于所有案例1-3,但我不能得到它来接收案例4,我试图弄乱它但不能弄明白因为它打破了其他案件。知道我需要更改/修改什么才能使我的正则表达式获得所有4个案例?谢谢。

2 个答案:

答案 0 :(得分:2)

试试这个

[\W"]*(?<name>.*?)[\"]*?\s*[<(]?(?<email>\S+@\S+)[>)]?

here on Regexr

我将地址周围的类设置为可选,并将与电子邮件匹配的部分更改为\S+@\S+,这意味着至少有一个非空格后跟@,然后至少还有一个非空白字符

由于上述版本也与结束字符匹配,因此您可以在@更多

之后限制部分
[\W"]*(?<name>.*?)[\"]*?\s*[<(]?(?<email>\S+@[^\s>)]+)[>)]?

看到它here on Regexr

答案 1 :(得分:-1)

编辑:这个适用于所有四个:

[\W"]*(?<name>.*?)[\"]*?\s*[<(]?(?<email>\S+@[^)>]+)[>)]?