[英]Regex Pattern Need Help Java toString() method
我在从 XML 生成的代码上有一个 java toString。 作为一家公司,我们正在将 toString() 记录到日志中,而我无法制作一个好的正则表达式来有效地屏蔽所有数据。 这是字符串的示例
String input="com.example.sensitive.info.UserInfo@15b1534[name=User1, clientName=HARVARD LAW SCHOOL, THE, clientId=12345]";
预计 output
com.example.sensitive.info.UserInfo@15b1534[name=User1, clientName=****************, clientId=12345]
有人可以帮我一个正则表达式,它将掩盖所有内容,直到下一个相等 = 之前的最后一个逗号(,)
这是我尝试过的
maskPatterns.add("clientName=(.*?)=");
这最终掩盖了直到下一个=。 我似乎无法弄清楚如何让它在下一个相等(=)之前回溯到最后一个逗号(,)。
另外,如果有人有更好的正则表达式,我会全神贯注
您可以使用
clientName=(.*?)(?=\s*,\s*\w+=|\])
查看正则表达式演示
细节
clientName=
- 文字字符串(.*?)
- 第 1 组:除换行符之外的任何零个或多个字符尽可能少(?=\s*,\s*\w+=|\])
- 一个正向前瞻,需要]
( \]
或 ( |
) 一个逗号,两端用零个或多个空格括起来 ( \s*,\s*
),然后是当前位置右侧的一个或多个单词字符和=
。或者,如果您需要相同数量的星号,请使用
String result = text.replaceAll("(\\G(?!^)|clientName=).(?=.*?,\\s*\\w+=|\\])", "$1*");
请参阅此正则表达式演示。
细节
(\\G(?!^)|clientName=)
.
- 除换行符以外的任何字符(?=.*?,\s*\w+=|\])
- 直到第一次出现
.*?,\s*\w+=
- 任何零个或多个字符,除了尽可能少的换行符、逗号、零个或多个空格、一个或多个单词字符和一个=
|
- 或者\]
- 一个]
字符。在此处使用String#replaceAll
:
String input = "com.example.sensitive.info.UserInfo@15b1534[name=User1, clientName=HARVARD LAW SCHOOL, THE, clientId=12345]";
String output = input.replaceAll("\\bclientName=.*?(\\s*)(?=\\w+=|\\])", "clientName=****************$1");
System.out.println(input);
System.out.println(output);
这打印:
com.example.sensitive.info.UserInfo@15b1534[name=User1, clientName=HARVARD LAW SCHOOL, THE, clientId=12345]
com.example.sensitive.info.UserInfo@15b1534[name=User1, clientName=**************** clientId=12345]
请注意,星号的数量可能不应该与clientName
中的原始字符数完全匹配。 这样做实际上会部分显示原始内容,至少会显示clientName
字符串的原始长度。
根据您的maskPatterns.add("clientName=(.*?)=");
示例我假设您想要捕获组 1 中的值。
如果它应该与用于标记值结尾的方括号无关,但您也不想匹配它们,则可以使用:
\bclientName=([^\r\n,=\[\]]+(?:,(?!\h*\w+=)[^\r\n,=\[\]]*)*)
解释
\bclientName=
一个单词边界,然后匹配clientName=
(
捕获组 1
[^\r\n,=\[\]]+
匹配 1+ 次除,
=
[
]
或换行符以外的任何字符(?:
非捕获组
,(?!\h*\w+=)
匹配一个逗号,断言直接在右边的不是 0+ 个水平空白字符、1+ 个单词字符和一个=
符号[^\r\n,=\[\]]*
可选匹配除换行符之外的任何字符,
=
[
]
)*
关闭非捕获组并重复 0+ 次以获得所有出现的逗号)
关闭第 1 组如果[
和]
也可以是 clientName 的一部分,则可以从字符类中省略它们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.