我想屏蔽字符串的一部分。例如:
https://example.com/test?abc=12345678901234567890123456&mnr=12345678901234567890123456
自
https://example.com/test?abc=********************123456&mnr=12345678901234567890123456
我需要屏蔽"abc="
后的前 20 位数字,并保持最后 6 位数字不变。
我试过(?<=abc=)(.*?)(?=&mnr)
但它显示example.com/test?abc=*&mnr=12345678901234567890123456
如果 abc= 包含字符和数字,正则表达式是什么
你可以试试这个:
abc=d{20}
并替换为:
abc=********************
演示
但是,如果您想验证 abc= 后跟 20 位数字,然后是 6 位数字,然后是 &mnr,然后想要替换 abc 的前 20 位数字,那么您可以使用以下正则表达式:
abc=d{20}(?=d{6}&mnr)
演示 2
如果 ABC 后面跟着数字以外的任何内容,并且您还想解决这个问题,那么您可以尝试以下方法:
将d{20}
替换为.{20}
此常规将在 url 中找到 abc 参数的前 14 位数字字符:
(?<=abc=)[0-9]{14}(?=[0-9]{6})
取代:
String data = "https://example.com/test?abc=12345678901234567890123456&mnr=12345678901234567890123456";
String result = data.replaceAll("(?<=abc=)[0-9]{14}(?=[0-9]{6})",
"**************");
System.out.println(result);
结果:
https://example.com/test?abc=**************567890123456&mnr=12345678901234567890123456
对于更漂亮的解决方案,您可以使用此正则表达式:
(?<=abc=[0-9]{0,14})[0-9](?=[0-9]{6})
替换将是:
String data = "https://example.com/test?abc=12345678901234567890123456&mnr=12345678901234567890123456";
String result = data.replaceAll("(?<=abc=[0-9]{0,14})[0-9](?=[0-9]{6})", "*");
System.out.println(result);
结果:
https://example.com/test?abc=***************67890123456&mnr=12345678901234567890123456