你如何在java正则表达式中逃避美元和大括号(即$ {title})?

时间:2011-05-19 23:14:03

标签: java regex

即你怎么做?

String string = "Sample string with ${title} to be inserted.";
string.replaceAll("${title}", title);

以下所有情况都会导致错误:

string.replaceAll("\\${title}", title);
string.replaceAll("\\\\${title}", title);
string.replaceAll("\\\\$\\{title\\}", title);

而且,似乎没有任何效果,这一切都会导致如下错误:

java.util.regex.PatternSyntaxException: Illegal repetition near index 4 \\$\\{title\\}
    at java.util.regex.Pattern.error(Pattern.java:1713)
    at java.util.regex.Pattern.closure(Pattern.java:2775)
    at java.util.regex.Pattern.sequence(Pattern.java:1889)
    at java.util.regex.Pattern.expr(Pattern.java:1752)

6 个答案:

答案 0 :(得分:23)

Pattern类有一个转义功能,可以像这样使用

string.replaceAll(Pattern.quote("${title}"), title);

答案 1 :(得分:15)

不确定最后一个会如何导致错误;它只是不匹配任何东西,因为你在$上使用了太多的反斜杠。

这应该有效:

string.replaceAll("\\$\\{title\\}", title);

答案 2 :(得分:6)

您可以将搜索字符串转义为\Q${title}\E

答案 3 :(得分:1)

这听起来像是模板语言的典型用例,例如FreeMarker。

答案 4 :(得分:0)

\$\{title\}

答案 5 :(得分:0)

在正则表达式中,转义字符为\,我们必须在\\中编写String\用作转义字符。

例如str = str.replaceAll("rot\\*speed", "rotorspeed");

rot*speed将替换为rotorspeed