[英]Java regex for removing all characters except a pattern
我有一个包含电子邮件的字符串。 在此之前和/或之后可能有多余的字符。 输入示例:
a1@b.com
a2@b.com abcd efg
x y z a3@b.com
p q a4@b.com x z
asd[x5@c.net]gh
我想删除多余的字符。
所需的输出:
a1@b.com
a2@b.com
a3@b.com
a4@b.com
x5@c.net
有效字符为a-zA-Z0-9._,因此在电子邮件之前和/或之后可能存在无效字符。
我尝试使用此代码来确定它是否是正确的电子邮件(假定它与其他字符之间用空格隔开),但是我无法替换为所需的字符串(使用s.replaceAll()):
if (s.matches("(?i).*\\s[a-zA-Z_\\.]+@[a-zA-Z_\\.]+\\.[a-zA-Z_\\.]+.*") ||
fields[2].matches("(?i).*[a-zA-Z_\\.]+@[a-zA-Z_\\.]+\\.[a-zA-Z_\\.]+\\s.*"))
您可以使用java.util.regex.Pattern和java.util.regex.Matcher
此代码将执行您要求的操作:
public static void main(String[] args) {
String[] testList = {"a1@b.com",
"a2@b.com abcd efg",
"x y z a3@b.com",
"p q a4@b.com x z",
"asd[a5@b.coom]gh"};
Pattern EMAIL_PATTERN = Pattern.compile("[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9-]+)*(\\.[A-Za-z]{2,})");
for(String test : testList){
Matcher m = EMAIL_PATTERN.matcher(test);
while (m.find()) {
System.out.println(m.group(0));
}
}
}
根据您对有效字符的定义,尝试:
^.*?([\w.]+@[\w.]+).*$
并替换为捕获组1
无法验证电子邮件地址。 只能验证类似电子邮件地址的外观 -由于新的tlds的字符数超过3个,因此即使完成此任务也非常棘手。
因此,您最好找到“无效”的电子邮件地址(邮件发送将失败),然后丢失有效的电子邮件地址。
采用
([a-zA-Z0-9!#$%&'*+-/=?^_`{|}~.]+\@(?:[a-zA-Z0-9.-]+|\[[0-9.]+\]))
抓取任何可能是电子邮件地址的内容。
([a-zA-Z0-9!#$%&'*+-/=?^_`{|}~.]+\@(?:[a-zA-Z0-9.-]+|\[[0-9.]+\]))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.