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]}}