我在从 XML 生成的代码上有一个 java toString 。我们作为一家公司正在将 toString() 记录到日志中,但我在制作一个好的正则表达式来有效地屏蔽所有数据时遇到了麻烦。
这是字符串的示例
String input="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]
有人可以帮助我使用正则表达式来掩盖所有内容,直到下一个等于之前的最后一个逗号 (,) =这是我尝试过的
maskPatterns.add("clientName=(.*?)=");
这最终会屏蔽直到下一个 = 。我似乎无法弄清楚如何让它回溯到下一个等于(=)之前的最后一个逗号(,)。另外,如果有人有更好的正则表达式,我全神贯注
最佳答案
您可以使用
clientName=(.*?)(?=\s*,\s*\w+=|\])
见 regex demo详情
clientName=
- 文字字符串 (.*?)
- 第 1 组:除换行符以外的任何零个或多个字符,尽可能少 (?=\s*,\s*\w+=|\])
- 需要 ]
的正向预测( \]
或 ( |
) 两端用零个或多个空格括起来的逗号 ( \s*,\s*
),然后是一个或多个单词字符和 =
紧接在当前位置的右侧。 或者,如果您需要相同数量的星号,请使用
String result = text.replaceAll("(\\G(?!^)|clientName=).(?=.*?,\\s*\\w+=|\\])", "$1*");
见 this regex demo .详情
(\\G(?!^)|clientName=)
.
- 除换行符以外的任何字符 (?=.*?,\s*\w+=|\])
- 直到第一次出现.*?,\s*\w+=
- 除换行符以外的任何零个或多个字符(尽可能少)、逗号、零个或多个空格、一个或多个单词字符和 =
|
- 或 \]
- 一个 ]
字符。 关于java - 正则表达式模式需要帮助 Java toString() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65184751/