繁体   English   中英

正则表达式模式需要帮助 Java toString() 方法

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM