正则表达式用于掩盖除Java中前两个和后两个字符之外的字符

时间:2016-01-08 10:52:04

标签: java regex

在Java中,我想写一个正则表达式来执行以下操作:
源字符串:abcdefg
输出字符串:ab***fg

源字符串:123456789
输出字符串:12*****89

源字符串:a123d
输出字符串:a1*3d

3 个答案:

答案 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})