正则表达式掩盖某些领域

时间:2018-06-05 12:02:36

标签: java regex string

我的字符串如下:

{5b4888ad-53cc-4fa8-9e0f-dbb339b238fd={NETFLOW_IP=[1.1.1.1, 2.2.2.2], SNMP_COMMUNITY=[****], SNMP_TRAP_IP=[1.1.1.1]}}

我想要一个最终字符串:

replacedMapStr = mapStr.replaceAll("(?<=SNMP_COMMUNITY=).*?(?=})", "****");

我正在尝试String:

SNMP_COMMUNITY

但它会截断SNMP_COMMUNITY

之后的所有字符

我想屏蔽SNMP_COMMUNITY字段的值。 CheckForUpdateAsync可以有任何价值。

2 个答案:

答案 0 :(得分:3)

您正在尝试使用.*?(?=})更改\\[.*?\\],如下所示:

String replacedMapStr = mapStr.replaceAll("(?<=SNMP_COMMUNITY=)\\[.*?\\]", "[****]");
                                                               ^^^^^^^^^    ^    ^

输出

{5b4888ad-53cc-4fa8-9e0f-dbb339b238fd={NETFLOW_IP=[1.1.1.1, 2.2.2.2], SNMP_COMMUNITY=[****], SNMP_TRAP_IP=[1.1.1.1]}}

答案 1 :(得分:0)

我喜欢正则表达式问题的所有不同答案,这是我的,并附有解释:

replacedMapStr = mapStr.replaceAll("SNMP_COMMUNITY=\[[^\]]*\]", "SNMP_COMMUNITY=[****]");

部分正则表达式:

  • SNMP_COMMUNITY =
    • 字面上这些字符连续
  • \ [
    • 左括号
  • [^ \]] *
    • 这是避免使用?的魔力。这是一个包含右括号的否定字符类。这里的意思是“任意数量的字符不是右括号。所以你可以看到扫描仪只是向前移动直到它找到一个右括号。反斜杠在那里表明我们的意思是一个右括号字符而不是结束角色类。
  • ]
    • 右括号

在此处查看此部分:http://refiddle.com/refiddles/5b16826175622d707f180000