提问人:Cdac15655482 提问时间:11/9/2023 最后编辑:Wiktor StribiżewCdac15655482 更新时间:11/10/2023 访问量:59
电子邮件正则表达式不适用于字符串邮件中的多个值
Email Regex is not working for multiple values in a string message
问:
下面是我的代码,我想屏蔽字符串中存在的电子邮件。
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
String email = "[email protected] your my [email protected]";
String regex="(^[^@]{3}|(?!^)\\G)[^@]";
Pattern pattern = Pattern.compile(regex);
String mask="$1*"; // String maskedEmail = email.replaceAll("\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Z]{2,6}\\b", "xxxxxx");
String email1 = pattern.matcher(email).replaceAll(mask);
System.out.println("email : "+email);
System.out.println("maskedEmail : "+email1);
}
}
上述代码的问题在于第一个电子邮件 ID,它屏蔽了第二个 ID。如何解决此问题
答:
0赞
Reilas
11/10/2023
#1
"...我想屏蔽字符串中存在的电子邮件......”
尝试匹配模式和 StringBuilder 类。
\b[^ ]+?(?=@)
下面是一个示例。
StringBuilder email = new StringBuilder("[email protected] your my [email protected]");
Pattern p = Pattern.compile("\\b[^ ]+?(?=@)");
Matcher m = p.matcher(email);
while (m.find()) email.replace(m.start(), m.end(), "x".repeat(m.group().length()));
输出
[email protected] your my [email protected]
评论
String regex="((?<!\\S)[^\\s@]{3}|(?!^)\\G)[^\\s@](?=[^@\\s]*@)";
\\b
(?<!\\S)
[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*
正则表达式将匹配字符串中的 和 ,使“your my”不匹配。如果您不想匹配域,只需使用 ,这也将与结尾匹配[email protected]
[email protected]
[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@
@