首先正则表达式的匹配方式是凡是符合的字符都获得,所以对于手机号
(?<=[\d]{3})\d(?=[\d]{4})
这样一个表达式就可以只保留前三位和后四位
但是!这个表达式在百度搜索出的所有正则表达式在线测验中都是不能通过的,不知道为什么所有(?<=)这个表达式都是不支持的,晕。
大体讲解一下这个表达式的含义
- [\d]{3}的意思是
三个数字
- (?<=)的意思是
前面匹配但不保留,比如ILOVEYOULOVEME,(?<=I).{5}的结果只有LOVEY而没有LOVEM,也没有I
所以目前连起来的条件可以表达为 要求的数字必须满足前面有三个数字
- (?=)的意思跟(?<=)恰好相反
后面匹配但不保留,比如ILOVEYOULOVEME,.{5}(?=ME)的结果只有ULOVE,没有ME
最后条件连起来就是 要求的数字必须满足前面有三个数字,且后面有4个数字。
假设手机号码为12345678910,则满足这一条件的数字为4和5和6和7。之所以用和,是想提醒最后的得到的数字不是4567而是分开的,代码中替代时只要替代一个“*”就好,因为会替代4次。
Java代码
String s = "15678901234";
s = s.replaceAll("(?<=[\\d]{3})\\d(?=[\\d]{4})", "*"); //这里*只要一个,因为会替代多次,每次一个。
System.out.println(s);
结果就是
156****1234