在Java中,我想写一个正则表达式来执行以下操作:
源字符串:abcdefg
输出字符串:ab***fg
源字符串:123456789
输出字符串:12*****89
源字符串:a123d
输出字符串:a1*3d
答案 0 :(得分:5)
(?<!^.?).(?!.?$)
这个想法是:
(?<!)
- 负面的背后隐藏以确保^.?
- 字符串的开头不是零或一个字符 .
- 将被替换的角色(?!)
- 否定前瞻以确保.?$
- 字符串的结尾不是零或一个字符远替换为单*
。
答案 1 :(得分:0)
\ A. {2}(。+)。{2} \ z将返回您想要的内容。如果少于5个字符将无法工作。这取决于语言。我的正则表达式是红宝石。在红宝石中:
\ A =&gt;字符串的开头 \ z =&gt;字符串结尾
找到相应的语言。
答案 2 :(得分:0)
以下代码使用正则表达式(.{2})(.*)(.{2})
完全按照您的要求执行(使用上面5
个字符串中的字符串):
import java.util.regex.Matcher;
import java.util.regex.Pattern;
String input = "1234567890";
final Pattern hidePattern = Pattern.compile("(.{1,2})(.*)(.{1,2})");
Matcher m = hidePattern.matcher(input);
String output;
if(m.find()) {
l = m.group(2).length();
output = m.group(1) + new String(new char[l]).replace("\0", "*") + m.group(3);
}
System.out.println(output); // 12******90
如果你需要允许少于5
个字符(直到3
以下没有意义),请使用:
(.{1,2})(.+)(.{1,2})