首页 > 解决方案 > Java 正则表达式按值提取和替换

问题描述

输入字符串

${abc.xzy}/demo/${ttt.bbb}
test${kkk.mmm}

结果 World/demo/Hello testSystem

大括号内的文本是我的属性的关键。我想用运行时值替换这些属性。

我可以执行以下操作来获取正则表达式匹配,但是我应该在替换逻辑中添加什么来更改 ${..} 与输入字符串中的相应运行时值匹配。

Pattern p = Pattern.compile("\\{([^}]*)\\}");
Matcher m = p.matcher(s);
while (m.find()) {
  // replace logic comes here
}

标签: javaregexregex-group

解决方案


另一种方法可能是使用第三方库,例如 Apache Commons Text。他们有 StringSubstitutor 类,看起来很有前途。

Map valuesMap = HashMap();
valuesMap.put("abc.xzy", "World");
valuesMap.put("ttt.bbb", "Hello");
valuesMap.put("kkk.mmm", "System");

String templateString = "${abc.xzy}/demo/${ttt.bbb} test${kkk.mmm}"
StringSubstitutor sub = new StringSubstitutor(valuesMap);
String resolvedString = sub.replace(templateString);

有关更多信息,请查看 Javadoc https://commons.apache.org/proper/commons-text/javadocs/api-release/org/apache/commons/text/StringSubstitutor.html


推荐阅读