我想屏蔽一部分字符串。例如:
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 =包含字符和数字
,那么正则表达式将是什么答案 0 :(得分:2)
你可以试试这个:
abc=\d{20}
并替换为:
abc=********************
但是如果你想验证abc =后跟20位数字然后是6位数然后是&amp; mnr然后想要替换abc的前20位数字那么你可以使用这个正则表达式:
abc=\d{20}(?=\d{6}&mnr)
如果abc后跟除了数字以外的任何内容,你也想要解决这个问题,那么你可以试试这个:
将\d{20}
替换为\.{20}
答案 1 :(得分:0)
此常规将在网址中找到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