Java 正则表达式替换lookhead

Java 正则表达式替换lookhead,java,regex,Java,Regex,我无法替换正则表达式 例如,我有电子邮件 felipe@gmail.com 我想换一个 f****e@g***l.com 我已经开始了 (?<=.).(?=[^@]*?.@)|(?<=\@.). (?进一步调整模式,您可以实现以下目标: "felipe@gmail.com".replaceAll("(?<=[^@])[^@](?=[^@]*?.[@.])", "*"); 我找到了这个:(? 您可以使用如下模式: String str = "felipe@gmail.com

我无法替换正则表达式

例如,我有电子邮件

felipe@gmail.com

我想换一个

f****e@g***l.com
我已经开始了

(?<=.).(?=[^@]*?.@)|(?<=\@.).

(?进一步调整模式,您可以实现以下目标:

"felipe@gmail.com".replaceAll("(?<=[^@])[^@](?=[^@]*?.[@.])", "*");
我找到了这个:
(?

您可以使用如下模式:

String str = "felipe@gmail.com";
String regex = "(.)(.*?)(.@.)(.*?)(.\\..*)";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(str);
String result = "";
if (matcher.find()) {
    result = matcher.group(1) + matcher.group(2).replaceAll(".", "*")
            + matcher.group(3) + matcher.group(4).replaceAll(".", "*")
            + matcher.group(5);
}

System.out.println(result);// output = f****e@g***l.com

另一种方法是使用
StringBuilder
并避免使用正则表达式

如果电子邮件名称中有
@
,或者域名类似于
.co.uk

因此,在这些情况下,这可能会有所帮助:

        String email = "felipe@gmail.com";
        StringBuilder sb = new StringBuilder(email);
        int mp = sb.lastIndexOf("@");
        int dp = sb.substring(mp).indexOf(".");
        for (int i = 1; i < sb.length(); i++) {
            if (i != mp && i != mp - 1 && i != mp + 1 && i != ((mp + dp) - 1) && i < (dp + mp)) {
                sb.setCharAt(i, '*');
            }
        }
String电子邮件=”felipe@gmail.com";
StringBuilder sb=新StringBuilder(电子邮件);
int mp=sb.lastIndexOf(“@”);
int dp=sb.子字符串(mp).indexOf(“.”);
for(int i=1;i
当然,在某些情况下,这也不起作用(即域中的
@
),代码有点凌乱,但在某些阶段可能会有用

模式:

^(.)[^@]*([^@])@(.).*(.)\.([a-z]+)$
替换:

\1***\2@\3***\4.\5

限制:不适用于一个字符的用户名和一个字符的域名,例如。I@home.com或john@B.com.

Felipe-只需小心下面的正则表达式答案,就好像您使用的是
.co.uk
之类的域,您可能无法获得所需的结果。例如,tks但几乎就是这样felipe@myhost.com.br不行我要用java,没有正则表达式,tks@FelipeFlores这个具体的例子将适用于我下面的答案,尽管考虑到电子邮件地址的复杂性,所有答案可能都有自己的缺陷。
\1***\2@\3***\4.\5