Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
673 views
in Technique[技术] by (71.8m points)

language agnostic - Extract email and name with regex

What would be the regular expressions to extract the name and email from strings like these?

johndoe@example.com
John <johndoe@example.com>
John Doe <johndoe@example.com>
"John Doe" <johndoe@example.com>

It can be assumed that the email is valid. The name will be separated by the email by a single space, and might be quoted.

The expected results are:

johndoe@example.com
Name: nil
Email: johndoe@example.com

John <johndoe@example.com>
Name: John
Email: johndoe@example.com

John Doe <johndoe@example.com>
Name: John Doe
Email: johndoe@example.com

"John Doe" <johndoe@example.com>
Name: John Doe
Email: johndoe@example.com

This is my progress so far:

(("?(.*)"?)s)?(<?(.*@.*)>?)

(which can be tested here: http://regexr.com/?337i5)

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

The following regex appears to work on all inputs and uses only two capturing groups:

(?:"?([^"]*)"?s)?(?:<?(.+@[^>]+)>?)

http://regex101.com/r/dR8hL3

Thanks to @RohitJain and @burning_LEGION for introducing the idea of non-capturing groups and character exclusion respectively.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...