java replaceAll正则预查实现数据脱敏替换\*星号并指定替换位置和替换数量的问题

2024年6月19日
之前看过用下面脱敏手机号的方式,好处是方便调整位数

String v = "13333333333";
String s = v.replaceAll("(?<=.{3}).(?=.{4})", "*"); // 133****3333

反向预查(?<=.{3})和正向预查(?=.{4})不能理解成保留位数
是用来匹配(前面有3个字符)(后面有4个字符)的字符,这些字符每一个都被replaceAll替换成参数符号"*"
按照这个思路,发挥空间还是有的,刁钻一点的比如邮箱@前全部替换成*,且最多5个*

String v = "1234567890@qq.com";
String s = v.replaceAll("(.+(?=.{4,}@)|.(?=.*@))", "*"); // *****@qq.com

思路:先匹配@4个字符再往前的字符,这些字符替换成一个*;再把剩下的4个每一个都替换成*凑够5个。
.(?=.{4,}@)匹配@前的第5个字符
.+(?=.{4,}@)匹配@前第5个字符前的所有字符,replaceAll时当做一个
.(?=.*@)@前的任意字符,匹配范围大,如果调换|的位置:(.(?=.*@)|.+(?=.{4,}@))后半段不生效

String s = v.replaceAll("(.(?=.*@)|.+(?=.{4,}@))", "*"); // **********@qq.com
String s = v.replaceAll("(.(?=.*@))", "*"); // **********@qq.com 和上面一样

例子 邮箱示例 1234567890@qq.com 作者@qq.com @qq.com

String v = "1234567890@qq.com";
// @前全部替换*,且最多5个*
String s = v.replaceAll("(.+(?=.{4,}@)|.(?=.*@))", "*"); // *****@qq.com
// @前的5个替换成1个*,开头多出来的不变
String s = v.replaceAll("(.{5})(?=@)", "*"); // 12345*@qq.com
// @前的5个替换成5个*,开头多出来的不变
String s = v.replaceAll(".(?=.{0,4}@)", "*"); // 12345*****@qq.com
// 保留@前的5个不变,再往前的替换n个*
String s = v.replaceAll(".(?=.{5,}@)", "*");// *****67890@qq.com    //换成一个*的:".+(?=.{5,}@)"

不合适的地方请评论指正
点个赞再走👍

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值