![](/img/trans.png)
[英]Java regex: Replace all characters with `+` except instances of a given string
[英]Replace string not in given regex java
我尝试替换在给定正则表达式中找不到的字符串。
Regex: (^.{1})|((.{1})(@.*))
例如:如果给定输入为dineshkani.n@gmail.com
,则上述正则表达式将提取"d", "n@gmail.com"
。 我尝试替换此正则表达式以外的字符。 我试图获得d**********n@gmail.com
有没有办法像这样替换。
提前致谢。
您为什么不将这些部分结合在一起? 在Java中,使用join方法:
String email = String.join("*****",arrayOfSplits);
您可以使用正则表达式替换两个锚点之间存在的字符吗? 是。
请看下面的有用资源。
您走在正确的道路上。 您的模式应至少包含3个捕获组 。 第一个捕获组将是字符串中的第一个字符,即示例中的电子邮件地址。 第二个捕获组是@
符号前从位置2到倒数第二个位置的字符。 而第三个捕获组将是其余角色。 以您的电子邮件为例:
[d] [ineshkani.] [n@gmail.com]
Capture group 1 --- Capture group 2 --- Capture group 3
现在已经正确捕获了他的组,我们想要对捕获组2进行替换,该替换将用一些混淆值(例如*)替换每个字符。 这将需要向第二组回溯 。
([\w|\d]{1}) # This says match either a word or digit char occurring once
([\S]+) # Match a non whitespace character with a greedy qualifier
(\S{1}\@\S+) # Match a non whitespace character then an '@' then the rest of the characters until whitespace is found.
现在,您将需要在Java替换功能中使用向后引用到组2。 请参阅此SO答案 ,以获取在捕获组上执行正则表达式替换的方法的良好示例。 您将需要使用.replaceAll()
并传递捕获组和替换字符串。 我希望这可以帮助您解决问题并理解使用正则表达式替换Java中的字符串时发生的情况。
有关贪婪量词的更多信息,请参见Regex教程。
根本不使用regex
可能会更容易。
为什么不只使用StringBuilder
并从1 to lastIndexOf("@") - 1
并将char设置为*
String email = "dineshkani.n@gmail.com";
StringBuilder sb = new StringBuilder(email);
int mp = sb.lastIndexOf("@");
for (int i = 1; i < mp - 1; i++) {
sb.setCharAt(i, '*');
}
输出:
d**********n@gmail.com
注意 :如评论中所述,您必须使用此解决方案检查电子邮件是否为dn@gmail.com
类的dn@gmail.com
,它只会按原样打印。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.