注意:这是一个 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)
if (matcher.find()) {
String noBraces = matcher.replaceAll("$2");
}
代替"$2"
matcher.group(2)
代替if
。现在就像魅力一样。
答案 0 :(得分:2)
您可以使用特殊的反向引用语法:
String noBraces = matcher.replaceAll("$2");