Java String正则表达式替换方法从替换中删除反斜杠

时间:2013-10-23 13:46:14

标签: java regex string

我只是失去了1小时来追踪我认为不正常的行为 在String类中使用replaceAll/replaceFirst

如果替换字符串中有反斜杠,则在删除时将删除它们 更换。然后我读到你可以使用Matcher.quoteReplacement(String)来 创建一个合适的替换字符串,但我的问题是为什么?我可以期待 如果不这样做,第一个参数应该使用Patter.quote(String)进行转义 想要特殊含义,但我没有理由改变替代品:(

我将开始使用replace(CharSequence,CharSequence),只是想知道原因:)

这是一个清楚显示“奇怪”行为的例子:

public static void main(String[] args) {
    String out = "\\\\test\\\\";
    System.out.println(out);
    String result = "a".replaceAll("a", out);
    System.out.println(result);
}

注意第二行是如何仅使用单个反斜杠而不是第一行

中的两个反斜杠

2 个答案:

答案 0 :(得分:2)

是的,反斜杠需要作为String#replaceAll中的第一个参数进行双重转义。

<强>原因:

这是因为您的替换字符串可以包含back-references,例如$1$2等,甚至替换文本也由基础regex engine处理,因此需要正如你也发现的那样,双重逃避与第一个参数相同。

答案 1 :(得分:2)

如前所述,替换字符串使用$个字符来引用捕获组。

因此,要插入文字$,您需要使用\转义它。

您可以在source

中看到这一点

我不确定他们为什么不像.Net那样使用$$