我想用解析后的 $1
替换字符串中出现的每个正则表达式。我怎样才能做到这一点?
String line = "foo <<VAR>> bar <<VAR>>";
Matcher matcher = Pattern.compile("<<(\\w*?)>>").matcher(line);
Map<String,String> replacements = Collections.singletonMap("VAR","REPLACEMENT");
String replacedLine = matcher.replaceAll(replacements.get(?.group(1)));
Assert.assertTrue("foo REPLACEMENT bar REPLACEMENT".equals(replacedLine));
最佳答案
您可以使用Matcher#appendReplacement
构建结果“as you match”的方法:
String line = "foo <<VAR>> bar <<VAR>> in <<NO>>";
Matcher m = Pattern.compile("<<(\\w+)>>").matcher(line);
Map<String,String> replacements = Collections.singletonMap("VAR","REPLACEMENT");
StringBuffer replacedLine = new StringBuffer();
while (m.find()) {
if (replacements.get(m.group(1)) != null)
m.appendReplacement(replacedLine, replacements.get(m.group(1)));
else
m.appendReplacement(replacedLine, m.group());
}
m.appendTail(replacedLine);
System.out.println(replacedLine.toString()); // => foo REPLACEMENT bar REPLACEMENT in <<NO>>
请参阅Java demo .
关于java - 在replaceAll中以编程方式获取捕获组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42066498/