RegEx用于匹配所有电子邮件ID

时间:2019-04-29 17:55:46

标签: regex

我已经编写了正则表达式来匹配事件中的电子邮件ID,但是,正则表达式在单个事件中不匹配所有@之前的电子邮件ID。它仅与“ @”之前的第一封电子邮件匹配,而与“ @'之前的第二封电子邮件匹配

示例事件:

(14.2) 04-01-18 00:03:38 (1944:3676)  PRINTFN: $G_NOTIFY_GRP_INTERNAL: peter.parker@abc.com,thomas.holland03@abc.com 
(14.2) 04-01-18 04:14:38 (5796:5968)  PRINTFN: $G_NOTIFY_GRP_INTERNAL:  henry.pete@abc.com,grant.subarao@abc.com

我写的正则表达式:

(?m)^(.*?)([A-z0-9._%+-]+\@)(.*)$

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

如果您想让正则表达式与所有电子邮件地址匹配,并且您的电子邮件需要进行一些更正以使其与电子邮件匹配,则不能使用^开始和$结束锚。尝试使用此正则表达式来匹配您的电子邮件,

[A-z0-9._%+-]+@[^,\s]*

Regex Demo

尽管,此匹配电子邮件的正则表达式在修改您的电子邮件以消除错误之后就足够了,但仅是为了使您的电子邮件匹配,更强大的电子邮件还可以通过检查更多模式(例如{{1})来确保电子邮件的进一步有效性} @等之后。

编辑: 根据您对我的帖子的评论,

  

感谢您的回复。但是,提供的正则表达式与   完整的电子邮件ID,但是,我尝试先匹配电子邮件ID   “ @”

您需要使用正面的眼神,以便仅在使用此正则表达式的.之前匹配该部分,

@

Regex Demo matching email before @ part

此外,这就是为什么您的正则表达式[A-z0-9._%+-]+(?=@[^,\s]*) 不能按照您想要的方式工作的原因。

如果您想在文本中进行多个匹配,则在预期可能匹配的数目不确定且可能因数据而异的情况下,不能使用(?m)^(.*?)([A-z0-9._%+-]+\@)(.*)$开始或^结束锚。因此,首先您需要从正则表达式中删除$^,因此,下一个$多行模式也变得无用,因为现在没有(?m)或{{1 }}。现在您有了^正则表达式。现在,此正则表达式的问题是(。*?)将匹配您的第一封电子邮件的用户名部分之前的文本,以便$匹配您的第一封电子邮件的用户名部分,然后(.*?)([A-z0-9._%+-]+\@)(.*)匹配所有剩余的字符,因此将第二封电子邮件在匹配([A-z0-9._%+-]+\@)中被消耗掉了,这就是为什么您看不到第二封电子邮件的用户名部分匹配的原因。为了获得正确的匹配,您需要使用我的正则表达式。