RegEx用于匹配所有电子邮件ID [重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RegEx用于匹配所有电子邮件ID [重复]相关的知识,希望对你有一定的参考价值。

这个问题在这里已有答案:

我写了正则表达式以匹配事件中的电子邮件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

我写的REGEX:

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

我该如何解决这个问题?

答案

如果您希望正则表达式匹配所有电子邮件地址,则不能使用^ start和$ end anchors,并且您的电子邮件需要一些更正以与电子邮件匹配。尝试使用此正则表达式来匹配您的电子邮件,

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

Regex Demo

虽然,这个用于匹配电子邮件的正则表达只是在修改你的电子邮件以删除错误之后就足够了,但只是为了使你的电子邮件匹配,更强大的电子邮件还可以通过检查更多模式来确保电子邮件的进一步有效性,例如在@等之后存在.

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

感谢您的答复。但是,提供的正则表达式匹配整个电子邮件ID但是,我试图匹配“@”之前的电子邮件ID

您需要使用正面的前瞻,才能在@之前使用此正则表达式匹配部件,

[A-z0-9._%+-]+(?=@[^,s]*)

Regex Demo matching email before @ part

此外,这就是为什么你的正则表达式(?m)^(.*?)([A-z0-9._%+-]+@)(.*)$没有按照你想要的方式工作。

如果您希望文本中有多个匹配项,则当预期可能匹配项的数量不确定时,您不能使用^ start或$结束锚,并且可能因数据而异。所以首先你需要摆脱你的正则表达式中的^$,因此,下一个(?m)多线模式也变得无用,因为现在没有^$。现在你离开了(.*?)([A-z0-9._%+-]+@)(.*)正则表达式。现在这个正则表达式的问题是,(。*?)将匹配您的第一个电子邮件的用户名部分之前的文本,以便([A-z0-9._%+-]+@)匹配您的第一个电子邮件的用户名部分,然后(.*)匹配任何剩余的字符,因此您的第二封电子邮件被用于匹配.*这就是为什么您没有看到第二封电子邮件的用户名部分匹配。要获得正确的匹配,您需要使用我的正则表达式。

以上是关于RegEx用于匹配所有电子邮件ID [重复]的主要内容,如果未能解决你的问题,请参考以下文章

php 用于匹配ID标签的REGEX

用于匹配正整数和负整数的 Javascript RegEx [重复]

RegEx 用于匹配除一些特殊字符和“:)”之外的所有字符

如果输入与 REGEX 不匹配,则循环回到代码的开头 | Python 2.7 [重复]

模式在regex101上运行但不适用于Google脚本[重复]

RegEx 用于匹配除逗号分隔的数字之外的所有字符