如何解决替换所有与给定模式匹配的事件
具有以下字符串:
String value = "/cds/horse/schema1.0.0/day=12321/provider=samsung/run_key=32ee/group_key=222/end_date=2020-04-20/run_key_default=32sas1/somethingElse=else"
例如,需要将run_key
和run_key_default
的值替换为%
,对于上述字符串,结果输出将是:
"/cds/horse/schema1.0.0/day=12321/provider=samsung/run_key=%/group_key=222/end_date=2020-04-20/run_key_default=%/somethingElse=else"
我想避免错误地修改其他值,因此我认为最好的解决方案是将replaceAll
方法与regex
结合起来
String output = value.replaceAll("\run_key=[*]\","%").replaceAll("\run_key_default=[*]\","%")
我不确定该如何为其构建正则表达式?
如果您知道比我提供的解决方案更好的解决方案,请随时发布。
解决方法
您可以使用此正则表达式进行搜索:
(/run_key(?:_default)?=)[^/]*
供替换使用:
"$1%"
Java代码:
String output = value.replaceAll("(/run_key(?:_default)?=)[^/]*","$1%");
RegEx详细信息:
-
(
:启动捕获组#1-
/run_key
:匹配文字/run_key
-
(?:_default)?
:匹配_default
可选 -
=
:匹配文字=
-
-
)
:结束捕获组#1 -
[^/]*
:匹配0个或多个非/
的字符 -
"$1%"
是替换,它会将我们的第一个捕获组放回去,其后是文字%
public static void main(String[] args) {
final String regex = "(run_key_default|run_key)=\\w*"; //regex
final String string = "/cds/horse/schema1.0.0/day=12321/provider=samsung/run_key=32ee/group_key=222/end_date=2020-04-20/run_key_default=32sas1/somethingElse=else";
final String subst = "$1=%"; //group1 as it is while remaining part with %
final Pattern pattern = Pattern.compile(regex);
final Matcher matcher = pattern.matcher(string);
final String result = matcher.replaceAll(subst);
System.out.println("Substitution result: " + result);
}
输出
替换结果:
/cds/horse/schema1.0.0/day=12321/provider=samsung/run_key=%/group_key=222/end_date=2020-04-20/run_key_default=%/somethingElse=else
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。