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

标签 java regex

我在从 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/

    相关文章:

    java - 如何用父子对象制作对象?

    java - 为 Java 中的大型数据集寻找纯基于磁盘的键值缓存

    java - 扫描仪中的正则表达式仅找到第一个匹配项

    javascript - 使用 Javascript 和 Jquery 从 HTML 中转义括号

    regex - Powershell在两个字符串之间匹配多行字符

    java - mapreduce 作业未与 LocalJobRunner 一起运行

    java - 我在使用 JDK1.8 的 HashMap 时遇到了一些问题

    java - 快速排序算法无法正常工作

    python - 删除python中的特定字典项(基于键格式)

    java - 在 Java 中使用 REGEX 从字符串中提取标记