使用正则表达式掩盖字符串的一部分

时间:2018-01-17 05:41:57

标签: java regex

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

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 =包含字符和数字

,那么正则表达式将是什么

2 个答案:

答案 0 :(得分:2)

你可以试试这个:

abc=\d{20}

并替换为:

abc=********************

Demo

但是如果你想验证abc =后跟20位数字然后是6位数然后是&amp; mnr然后想要替换abc的前20位数字那么你可以使用这个正则表达式:

abc=\d{20}(?=\d{6}&mnr)

Demo 2

如果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
相关问题