我希望可能有一个简单的方法来做到这一点,我假设正则表达式.什么是java中将以下字符串拆分成电子邮件地址的最佳方式?
bob@home.com, "Jane" <jane@home.com>, "Smith, Mr" <smith@home.com>
Run Code Online (Sandbox Code Playgroud)
逗号可以出现在双引号内的事实使得它更难一些.我觉得理想情况下它也适用于单引号?
bob@home.com, 'Jane, Ms' <jane@home.com>, "Smith, Mr" <smith@home.com>
Run Code Online (Sandbox Code Playgroud)
我认为检查是否有更简单的方法可以节省编写完整的解析器!
大多数将由以下人员处理:
\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b
Run Code Online (Sandbox Code Playgroud)
虽然完整的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,并讨论了它"不完美"的地方.
在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());
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2304 次 |
| 最近记录: |