正则表达式从字符串中查找电子邮件地址

我的目的是从网页上获取电子邮件地址。 我有页面源。 我正逐行阅读页面源代码。 现在我想从我正在阅读的当前行获取电子邮件地址。 此当前行可能有也可能没有电子邮件。 我看到了很多正则表达式的例子。 但其中大多数都是用于validation电子邮件地址。 我想从页面源获取电子邮件地址而不是validation。 它应该工作http://emailx.discoveryvip.com/正在工作

一些示例输入行是:

1)

Send details to neeraj@yopmail.com

2)

Interested should send details directly to www.abcdef.com/abcdef/. Should you have any questions, please email neeraj@yopmail.com. 3)Note :- Send your queries at neeraj@yopmail.com for more details call Mr. neeraj 012345678901.

我想从示例1,2和3中获取neeraj@yopmail.com。我使用的是java,我在rexexp中表现不佳。 帮我。

您可以根据RFC 2822validation电子邮件地址格式,具体如下:

 (?:[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])+)\]) 

这是来自regular-expressions.info的解释:

这个正则表达式有两个部分:@之前的部分和@之后的部分。 @之前的部分有两种选择:它可以由一系列字母,数字和某些符号组成,包括一个或多个点。 但是,点可能不会连续出现或出现在电子邮件地址的开头或结尾。 另一种选择要求@之前的部分用双引号括起来,允许引号之间的任何ASCII字符串。 空格字符,双引号和反斜杠必须使用反斜杠进行转义。

你可以在这里查看: Rubular示例 。

正确的代码是

 Pattern p = Pattern.compile("\\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[AZ]{2,4}\\b", Pattern.CASE_INSENSITIVE); Matcher matcher = p.matcher(input); Set emails = new HashSet(); while(matcher.find()) { emails.add(matcher.group()); } 

这将在您的长文本/ html输入中提供邮件地址列表。

你需要这样的正则表达式:

 ".*(\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[AZ]{2,4}\b).*" 

匹配时,您可以提取第一个组,这将是您的电子邮件。

 String regex = ".*(\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[AZ]{2,4}\b).*"; Pattern p = Pattern.compile(regex); Matcher m = p.matcher("your text here"); if (m.matches()) { String email = m.group(1); //do somethinfg with your email } 

这是使用Patterns.EMAIL_ADDRESS从输入String中提取所有电子邮件的简单方法:

  public static List getEmails(@NonNull String input) { List emails = new ArrayList<>(); Matcher matcher = Patterns.EMAIL_ADDRESS.matcher(input); while (matcher.find()) { int matchStart = matcher.start(0); int matchEnd = matcher.end(0); emails.add(input.substring(matchStart, matchEnd)); } return emails; }