Java正则表达式提取和替换值

标签 java regex regex-group

输入字符串

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

结果 世界/演示/你好 测试系统

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

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

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

最佳答案

另一种方法是使用第三方库,例如 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

关于Java正则表达式提取和替换值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56662154/

相关文章:

regex - 如何在第 9 个反向引用之后对正则表达式进行分组?

java - 如何将现有的 NetBeans Java EE 6 Web 项目升级到 Java EE 7?

java - 基于底层实现的输出对象

regex - 为什么标点符号的 R gsub(或正则表达式)没有得到所有标点符号?

ruby - 使用正则表达式识别格式化数字

regex - 提取价格文本时的 postgresql 正则表达式分组 + 转换问题

java - 类的静态方法之间的同步

java - 编译java时如何抑制Cannot Find Symbol错误?

PHP Regex - 删除标签之间的文本

javascript - 如何限制 JavaScript 中的消息?