12345678901234567890
如上是一个银行帐户号,其位数不确定,但一定长于8位,小于20位;全部是数字;
我的目标是用一个(只用一个replaceAll)正则表达式替换后,使得只保留首尾的4位数字,其他数字全用*号覆盖,如上的结果应是:
1234************7890
如上是一个银行帐户号,其位数不确定,但一定长于8位,小于20位;全部是数字;
我的目标是用一个(只用一个replaceAll)正则表达式替换后,使得只保留首尾的4位数字,其他数字全用*号覆盖,如上的结果应是:
1234************7890
StringBuffer sb=new StringBuffer();
sb.append("$1");
for(int i=0;i<str.length()-8;i++) {
sb.append('*');
}
sb.append("$2");
System.out.println(str.replaceAll("^([\\d]{4})[\\d]{0,12}([\\d]{4})$",sb.toString()));
首先,感谢你的帮助,我漏了一点,这是我在程序中对众多各类数据的格式化操作,或者说过滤吧,每种类型在配置文件中用一个正则表达式,而且只能用一个!
String str = "1234567890";
System.out.println(str.replaceAll("^(\\d{4})(.*)(\\d{4})$","$1"+(str.substring(0,str.length()-8).replaceAll(".*","*"))+"$3"));
System.out.println("123456123456123457890".replaceAll("(?<=\\d{4})\\d(?=\\d{4})", "*"));
非常感谢,你写的正是我想要的,但我有一点不明白,左边的那个正向预查,多了一个“<”,这个该如何理解,还烦劳解释一下!
(?<=xxxxx)\d 反向..................
\d(?!xxxxx) 正向不可以是xxxxx才捕获 \d
(?<!xxxxx)\d 反向......................
是否还有换成>号的用法?
(?<=xxxxx)\d 反向..................
\d(?!xxxxx) 正向不可以是xxxxx才捕获 \d
(?<!xxxxx)\d 反向......................这四个都表示“预查后不保留预查到的字符”,“<”的意思是“向左边”预查,否则是向“右”。