Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正则表达式从字符串中查找电子邮件地址_Java_Html_Regex - Fatal编程技术网

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

Java 正则表达式从字符串中查找电子邮件地址,java,html,regex,Java,Html,Regex,我的目的是从网页上获取电子邮件地址。我有页面来源。我正在逐行阅读页面源代码。现在我想从我正在阅读的当前行中获取电子邮件地址。当前行可能有电子邮件,也可能没有电子邮件。我看到了很多regexp示例。但其中大多数用于验证电子邮件地址。我想从未验证的页面源获取电子邮件地址。它应该像现在这样工作 一些输入行示例如下: 1)<p>Send details to <a href="&#109;&#97;&#105;&#108;&#116;&#

我的目的是从网页上获取电子邮件地址。我有页面来源。我正在逐行阅读页面源代码。现在我想从我正在阅读的当前行中获取电子邮件地址。当前行可能有电子邮件,也可能没有电子邮件。我看到了很多regexp示例。但其中大多数用于验证电子邮件地址。我想从未验证的页面源获取电子邮件地址。它应该像现在这样工作

一些输入行示例如下:

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.
1)将详细信息发送到

2) 感兴趣的用户应将详细信息直接发送至。如果您有任何问题,请发送电子邮件。 3) 注意:-将您的疑问发送至neeraj@yopmail.com有关更多详细信息,请致电neeraj先生012345678901。
我想去neeraj@yopmail.com根据示例1、2和3。
我正在使用java,但我不擅长rexexp。帮帮我

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

".*(\\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}\\b).*"
当它匹配时,您可以提取第一组,这将是您的电子邮件

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

您可以验证电子邮件地址格式,如下所示:

(?:[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])+)\])
下面是来自以下方面的解释:

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

您可以在这里查看:。

正确的代码是

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());
}
Pattern p=Pattern.compile(\\b[A-Z0-9.\%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\\b),
模式(不区分大小写);
匹配器匹配器=p.Matcher(输入);
Set emails=newhashset();
while(matcher.find()){
emails.add(matcher.group());
}

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

这是一种从输入字符串中提取所有电子邮件的简单方法,使用:

公共静态列表getEmails(@NonNull字符串输入){
列出电子邮件=新建ArrayList();
Matcher Matcher=Patterns.EMAIL\u ADDRESS.Matcher(输入);
while(matcher.find()){
int matchStart=matcher.start(0);
int matchEnd=matcher.end(0);
emails.add(input.substring(matchStart,matchEnd));
}
回复邮件;
}

您是否查看了谷歌对“java regex电子邮件”的评论?请查看该邮件的页面来源。他们给出了提取电子邮件的方法。但是我想要一个java版本你试过什么?Stack Overflow是一个问答网站,而不是“为我做事”网站。让我们看看你有什么,这样我们就可以帮助你解决你的具体问题。@Vitaly是的。相关的是。但它不起作用。@Neeraj,因为您已经知道如何验证电子邮件,您可以再进一步,捕获匹配的组,组中的数据正是您想要的。非常感谢您。我正在尝试使用您的regexp。请确保转义正斜杠、反斜杠等。如何仅获取第一个匹配的文本regexp不允许使用小写字母,除非您使用不区分大小写的
编译它。事实上,它不会匹配大多数电子邮件地址。这不考虑包含两个以上部分的域名,例如,在英国,您的地址如下something@company.co.uk. 现在你也有了一堆超过4个字符的新TLD。
    public static List<String> getEmails(@NonNull String input) {
        List<String> 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;
    }