regex 使用正则表达式屏蔽JSON字符串中的电子邮件

ha5z0ras  于 2023-01-31  发布在  其他
关注(0)|答案(1)|浏览(133)

我有一个电子邮件屏蔽正则表达式,现在我试图将它应用于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" }

a64a0gku

a64a0gku1#

您可以更新模式以使用有限的lookbehindAssert:

(?<=email":"[^\s"]{1,100})[a-zA-Z0-9](?=[^\s"@]*@)

零件的样式:

  • (?<=email":"正后视,向左Assertemail":"
  • [^\s"]{1,100}匹配左侧除"以外的非空白字符1-100次(根据需要调整量词)
  • )关闭后视
  • [a-zA-Z0-9]匹配单个字符a-zA-Z 0 -9
  • (?=[^\s"@]*@)正向前瞻,在右侧Assert@,不加双引号

请参见regex101 demoJava demo
使用双反斜杠和转义双引号的Java示例:

String jsonString = "{ \"name\":\"jhon\", \"email\":\"test.ing%02@gmail.com\" }";
String result = jsonString.replaceAll("(?<=email\":\"[^\\s\"]{1,100})[a-zA-Z0-9](?=[^\\s\"@]*@)", "*");
System.out.println(result);

产出

{ "name":"jhon", "email":"t***.***%**@gmail.com" }

相关问题