Java 用于屏蔽特定字段的正则表达式

Java 用于屏蔽特定字段的正则表达式,java,regex,string,Java,Regex,String,我有下面这样的字符串: {5b4888ad-53cc-4fa8-9e0f-dbb339b238fd={NETFLOW_IP=[1.1.1.1, 2.2.2.2], SNMP_COMMUNITY=[public], SNMP_TRAP_IP=[1.1.1.1]}} 我想要最后一个字符串: {5b4888ad-53cc-4fa8-9e0f-dbb339b238fd={NETFLOW_IP=[1.1.1.1, 2.2.2.2], SNMP_COMMUNITY=[****], SNMP_TRAP_IP

我有下面这样的字符串:

{5b4888ad-53cc-4fa8-9e0f-dbb339b238fd={NETFLOW_IP=[1.1.1.1, 2.2.2.2], SNMP_COMMUNITY=[public], SNMP_TRAP_IP=[1.1.1.1]}}
我想要最后一个字符串:

{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=).*?(?=})", "****");

replacedMapStr=mapStr.replaceAll((?你很接近了)试着用
\[.*?\]
改变
*?(?=})
,如下所示:

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

我喜欢regex问题的所有不同答案,以下是我的答案,并附有解释:

replacedMapStr=mapStr.replaceAll(“SNMP\U社区=\[[^\]]*\]”,“SNMP\U社区=[*****]”);

正则表达式的部分内容包括:

  • SNMP_社区=
    • 按字面意思,这些字符排成一行
  • \[
    • 左括号
  • [^\]]*
    • 这是避免使用
      的魔法。这是一个包含右括号的否定字符类。这里的意思是“不是右括号的任意数量的字符。因此,您可以看到扫描仪将简单地向前移动,直到找到右括号为止。其中的反斜杠表示右括号字符,而不是结束字符类
  • ]
    • 右括号

在这里查看此部分的操作:

您应该尝试匹配
[
]
之间的字符串,而不是匹配
*
。我不提供正则表达式,因为我不知道此部分的格式,但\w可能会起作用。我认为至少有些正则表达式实现实际上不需要反斜杠,可以解析[^]]正确。GNU Grep为一。
{5b4888ad-53cc-4fa8-9e0f-dbb339b238fd={NETFLOW_IP=[1.1.1.1, 2.2.2.2], SNMP_COMMUNITY=[****], SNMP_TRAP_IP=[1.1.1.1]}}