我正在尝试屏蔽 CC 编号,以一种不屏蔽第三个字符和最后三个字符的方式。
对于如..7108898787654351
到**0**********351
我试过了(?<=.{3}).(?=.*...)
。它揭露了最后三个字符。但它也揭露了前三个。
你能指出一些关于如何单独揭开第三个字符的提示吗?
您可以将此正则表达式与前瞻和后瞻一起使用:
str = str.replaceAll("(?<!^..).(?=.{3})", "*");
//=> **0**********351
Run Code Online (Sandbox Code Playgroud)
正则表达式详情:
(?<!^..)
:否定前瞻断言我们在开始后没有 2 个字符(从匹配中排除第 3 个字符).
: 匹配一个字符(?=.{3})
: 正向前瞻断言我们前面至少有 3 个字符我建议正则表达式不是做到这一点的唯一方法。
char[] m = new char[16]; // Or whatever length.
Arrays.fill(m, '*');
m[2] = cc.charAt(2);
m[13] = cc.charAt(13);
m[14] = cc.charAt(14);
m[15] = cc.charAt(15);
String masked = new String(m);
Run Code Online (Sandbox Code Playgroud)
它可能更冗长,但它比正则表达式更具可读性(和可调试性)。