gpt4 book ai didi

java - 用于拆分电子邮件地址的正则表达式(在 Java 中)

转载 作者:行者123 更新时间:2023-11-29 06:25:49 27 4
gpt4 key购买 nike

我希望有一种简单的方法可以做到这一点,我假设使用正则表达式。在 Java 中将以下字符串拆分为电子邮件地址的最佳方法是什么?

bob@home.com, "Jane" <jane@home.com>, "Smith, Mr" <smith@home.com>

逗号可以出现在双引号内的事实使它变得更加困难。我想理想情况下它也适用于单引号?

bob@home.com, 'Jane, Ms' <jane@home.com>, "Smith, Mr" <smith@home.com>

我认为最好检查一下是否有更简单的方法来避免编写完整的解析器!

最佳答案

大部分将由以下人员处理:

\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b

尽管为了完全符合 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])+)\])

均来自 regular-expressions.info ,并讨论了它在哪些地方不够“完美”。

在 Java 中,只需不断重复以仅查找没有姓名的电子邮件地址。

import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class Main {
public static void main(String[] args) {
new Main().findEmails("bob@home.com, \"Jane\" <jane@home.com>, \"Smith, Mr\" <smith@home.com>");
}
public void findEmails(String s) {
System.out.println("ready: "+s);
Pattern p = Pattern.compile("\\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}\\b",
Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(s);
while (m.find())
System.out.println("Found: "+m.group());
}
}

关于java - 用于拆分电子邮件地址的正则表达式(在 Java 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1424636/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com