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