java - 在replaceAll中以编程方式获取捕获组

标签 java string regexp-replace

我想用解析后的 $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/

相关文章:

java - 仅最后一个索引值被插入到 Excel 工作表中

java - MVC 中的推与拉模型

string - 执行 Boyer-Moore 模式匹配时是否必须考虑编码?

regex - 从数据中提取所需的结果

regex - 如何使用 regexp_replace 只替换捕获组而不是完整的匹配字符串

java - 方法返回 int 类型,但我不断收到 "this method must return a result of type int"错误

java - 如何通过ussd从手机发送消息到网络服务器?

python - 如何提取 HTML 中元素的内容?

Java String.format() 前导零和 1 位小数

java - 正则表达式替换除星号和转义星号之外的所有特殊字符