我需要解析以下字符串的电子邮件地址部分:
“先生兔子”< bob@bunny.com>
< bob@bunny.com>
“bob是一只兔子”< bob@bunny.com>
bob@bunny.com
“123 go bob go!” < bob@bunny.com>
在所有情况下,我都在寻找字符串“bob@bunny.com”并且可以忽略其余部分。
我尝试了各种组合的/"[^"]?"????????([\ w@.]?)>?/但找到魔法模式正在逃避我。
建议?
FWIW这将在Perl中运行。
答案 0 :(得分:0)
如果你想要一个遵守RFC 2822的那个,那么将它翻译成Regex语法将是你想要的:
(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])
来自http://www.regular-expressions.info/email.html,其中包含其他较小的表达式。
答案 1 :(得分:0)
如果一个简单的正则表达式可以,那么你可以使用:
([a-zA-Z0-9._%-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,4})
正如@Peter所提到的,如果你想遵守RFC 2822,它会变得更复杂。但是,实际上你可能不想完全遵守,因为RFC规定使用过时的双引号和括号,这些都不是甚至一些电子邮件应用程序支持。一个更实用,但仍然相当强大的例子是这样的:
[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?