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

Nee*_*raj 14 html java regex

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

一些示例输入行是:

1)<p>Send details to <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;%72%65%62%65%6b%61%68@%68%61%63%6b%73%75%72%66%65%72.%63%6f%6d">neeraj@yopmail.com</a></p>

2)<p>Interested should send details directly to <a href="http://www.abcdef.com/abcdef/">www.abcdef.com/abcdef/</a>. Should you have any questions, please email <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;%6a%6f%62%73@%72%65%6c%61%79.%65%64%75">neeraj@yopmail.com</a>.

3)Note :- Send your queries at  neeraj@yopmail.com  for more details call Mr. neeraj 012345678901.
Run Code Online (Sandbox Code Playgroud)

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

小智 15

您可以根据RFC 2822验证电子邮件地址格式,其中包括:

(?:[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])+)\])
Run Code Online (Sandbox Code Playgroud)

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

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

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


aru*_*net 14

正确的代码是

Pattern p = Pattern.compile("\\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}\\b",
    Pattern.CASE_INSENSITIVE);
Matcher matcher = p.matcher(input);
Set<String> emails = new HashSet<String>();
while(matcher.find()) {
  emails.add(matcher.group());
}
Run Code Online (Sandbox Code Playgroud)

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

  • 这不考虑具有两个以上部分的域名,例如在英国,您的地址如something@company.co.uk.此外,如今您有大量超过4个字符的新TLD. (2认同)