我有一个电子邮件屏蔽正则表达式,现在我试图将它应用于JSON字符串屏蔽电子邮件。
Regex: (?<=.{1})(?=[a-zA-Z0-9]).(?=.*@)
如果我们在String变量中将其应用于电子邮件,它会工作得很好。
String s = "test.ing%02@gmail.com";
s= s.replaceAll("(?<=.{1})(?=[a-zA-Z0-9]).(?=.*@)", "*");
输出:t***.***%**@gmail.com
现在我尝试在包含email字段的JSON字符串上应用它。我选择了email字段,但是regex没有识别它的值
String jsonString = "{ \"name\":\"jhon\", \"email\":\"test.ing%02@gmail.com\" }";
String result = jsonString.replaceAll("(?<=email\":\")((?<=.{1})(?=[a-zA-Z0-9]).(?=.*@))(?=\")", "*");
System.out.println(result);
实际产量:{ "name":"jhon", "email":"test.ing%02@gmail.com" }
预期输出:{ "name":"jhon", "email":"t***.***%**@gmail.com" }
1条答案
按热度按时间a64a0gku1#
您可以更新模式以使用有限的lookbehindAssert:
零件的样式:
(?<=email":"
正后视,向左Assertemail":"
[^\s"]{1,100}
匹配左侧除"
以外的非空白字符1-100次(根据需要调整量词))
关闭后视[a-zA-Z0-9]
匹配单个字符a-zA-Z 0 -9(?=[^\s"@]*@)
正向前瞻,在右侧Assert@
,不加双引号请参见regex101 demo和Java demo。
使用双反斜杠和转义双引号的Java示例:
产出