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

Jac*_*cob 13 java regex

即你怎么做?

String string = "Sample string with ${title} to be inserted.";
string.replaceAll("${title}", title);
Run Code Online (Sandbox Code Playgroud)

以下所有结果都会导致错误:

string.replaceAll("\\${title}", title);
string.replaceAll("\\\\${title}", title);
string.replaceAll("\\\\$\\{title\\}", title);
Run Code Online (Sandbox Code Playgroud)

而且,似乎没有任何工作,它都会导致如下错误:

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)
Run Code Online (Sandbox Code Playgroud)

rat*_*eak 23

Pattern类有一个转义函数,用于这样的用途

string.replaceAll(Pattern.quote("${title}"), title);
Run Code Online (Sandbox Code Playgroud)


Bol*_*ock 15

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

这应该工作:

string.replaceAll("\\$\\{title\\}", title);
Run Code Online (Sandbox Code Playgroud)


kur*_*der 6

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