[英]Java regex find substring in string
我在应用程序启动后打印属性。 我需要隐藏密码的值。 我添加了一个新属性,如:
secrets:my.first.password,my.second.password
并在打印前检查每个属性。 如果secrets
包含密钥,我将 value 替换为 ***。 例如,我有这些属性:
my.first.name:some name
my.first.password:123
my.second.name:second name
my.second.password:456
secrets:my.first.password,my.second.password
我将打印下一行:
my.first.name:some name
my.first.password:***
my.second.name:second name
my.second.password:***
secrets:my.first.password,my.second.password
我用这个代码来做(protectedProperties = splitted secrets property):
protected String getViewableValue(String key, Object value) {
if (protectedProperties.contains(key)) {
return key + ":***";
} else {
return key + ":" + value;
}
}
现在我需要添加一个新选项。 我不仅需要隐藏属性的完整键,还需要隐藏掩码。 例如:
secrets:my.first.password,*password*
这意味着所有带有密钥的属性都应该隐藏密码。 我写了这段代码并且它有效(我之前从单词的开头和结尾删除了 *):
protected String getViewableValue(String key, Object value) {
for (String property : protectedProperties) {
if (key.contains(property)) return key + ":***";
}
return key + ":" + value;
}
但我不喜欢这个解决方案。 我在考虑正则表达式。 我可以将我的解决方案更改为正则表达式吗?
用正则表达式替换全部 - 用变量和子字符串替换
正则表达式:
"my\\.(?:first|second)\\.password:)\\S+"
上下文中的正则表达式:
public static void main(String[] args) {
String input = "my.first.name:some name\n"
+ "my.first.password:123\n"
+ "my.second.name:second name\n"
+ "my.second.password:456\n"
+ "secrets:my.first.password,my.second.password\n";
String result = input
.replaceAll("(my\\.(?:first|second)\\.password:)\\S+","$1:***");
System.out.println(result);
}
输出:
my.first.name:some name
my.first.password::***
my.second.name:second name
my.second.password::***
secrets:my.first.password,my.second.password
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.