使用正则表达式屏蔽字符串的一部分



我想屏蔽字符串的一部分。例如:

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

最新更新