电子邮件正则表达式不适用于字符串邮件中的多个值

Email Regex is not working for multiple values in a string message

提问人:Cdac15655482 提问时间:11/9/2023 最后编辑:Wiktor StribiżewCdac15655482 更新时间:11/10/2023 访问量:59

问:

下面是我的代码,我想屏蔽字符串中存在的电子邮件。

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。如何解决此问题

Java 正则表达式

评论

0赞 Wiktor Stribiżew 11/9/2023
它应该是这样的。或者,如果您的匹配必须始终以单词 char 开头,则使用 而不是。查看 ideone.com/GfQUPmString regex="((?<!\\S)[^\\s@]{3}|(?!^)\\G)[^\\s@](?=[^@\\s]*@)";\\b(?<!\\S)
0赞 Ishan 11/9/2023
[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*正则表达式将匹配字符串中的 和 ,使“your my”不匹配。如果您不想匹配域,只需使用 ,这也将与结尾匹配[email protected][email protected][a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@@
0赞 Wiktor Stribiżew 11/9/2023
...但不要在 Java 中使用正则表达式,它的正则表达式引擎在对长文本使用它们时对此类模式不可靠。

答:

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]