掩码使用regualr在java中表达的字符串

时间:2015-08-28 12:55:31

标签: java regex

我需要一个代码来使用正则表达式来掩盖String。 需要屏蔽长度大于或等于4的数字。

public class Mask{
String data="+918033667777,,,2,,,4937015106932345,,,1,3,,,,467298364729038,,24789438292,,7979,,,,,,,1,,1";
    public static void main(String[] args){
       data = data.replaceAll("(?<=\\D)\\d{4}(?=\\D)", "****").replaceAll("\\d{12}(?=\\d{4})", "************");
       System.out.println(data);
    }
}

输出:+918033667777 ,,, 2 ,,, *************** ,,, 1,3 ,,,, *********** **** ,, *********** ,, **** ,,,,,,, 1,1" i,我需要屏蔽长度大于或等于4的数字。

1 个答案:

答案 0 :(得分:4)

尝试:

(?<=,)\d(?=\d{3,})|(?!\A)\G\d

DEMO

  • (?<=,) - 逗号的正面观察
  • \d(?=\d{3,}) - 数字后跟另外三位数字(正数 超前)
  • (?!\A)\G\d - 检查匹配是否从前一个匹配停止的地方继续,然后是数字,(?!\A)是否与字符串中的第一个数字不匹配。但是,如果您不想仅匹配前面带有+的数字,那么这是多余的

Java中的示例:

public class Test{

    public static void main(String[] args){
        String data="+918033667777,,,2,,,4937015106932345,,,1,3,,,,467298364729038,,24789438292,,7979,,,,,,,1,,1";
        data = data.replaceAll("(?<=,)\\d(?=\\d{3,})|(?!\\A)\\G\\d", "*");
        System.out.println(data);
    }
}

带输出:

  

918033667777 ,,, 2 ,,, **************** ,,, 1,3 ,,,, ************ *** ,, *********** ,, **** ,,,,,,, 1,...,1