使用正则表达式删除所有不情愿的花括号

时间:2011-09-05 13:14:24

标签: java regex

注意:这是一个 Java 唯一的问题(即没有Javascript,sed,Perl等)

我需要在一长串文本中过滤掉所有“不情愿”的花括号({})。

(“不情愿”,我的意思是reluctant quantifier)。

我已经能够提出以下正则表达式,它正确地找到并列出所有这些事件:

    Pattern pattern = Pattern.compile("(\\{)(.*?)(\\})", Pattern.DOTALL);  
    Matcher matcher = pattern.matcher(originalString);
    while (matcher.find()) {
        Log.d("WITHIN_BRACES", matcher.group(2));
    }

我现在的问题是如何使用对应的 matcher.group(0)替换找到的每个 {/ 1}}。

直觉上我试过了:

matcher.group(2)

但是,仅使用 first while (matcher.find()) { String noBraces = matcher.replaceAll(matcher.group(2)); } 取代了所有找到的matcher.group(0),这当然不是我想要的。

Java的正则表达式中是否有表达式或方法来执行我需要的“相应的replaceAll”?

答案:感谢下面的提示,我已经能够提出2个修复工具:

matcher.group(2)
  1. 修复#1:使用if (matcher.find()) { String noBraces = matcher.replaceAll("$2"); } 代替"$2"
  2. 修复#2:使用matcher.group(2)代替if
  3. 现在就像魅力一样。

1 个答案:

答案 0 :(得分:2)

您可以使用特殊的反向引用语法:

String noBraces = matcher.replaceAll("$2");