如何在Java正则表达式中转义美元和花括号即$ {title}?

问题描述

| 即您是如何做到的?
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)
    

解决方法

不知道最后一个将如何导致错误;它只是不匹配任何内容,因为您在ѭ3上使用了太多的反斜杠。 这应该工作:
string.replaceAll(\"\\\\$\\\\{title\\\\}\",title);
    ,Pattern类具有此类的转义功能
string.replaceAll(Pattern.quote(\"${title}\"),title);
    ,您可以将搜索字符串转义为
\\Q${title}\\E
    ,这听起来像模板语言(例如FreeMarker)的典型用例。     ,
\\$\\{title\\}
    ,在正则表达式中,转义字符为
\\
才能使用,我们必须像
String
一样写
\\\\
\\
用作转义字符。 例如
str = str.replaceAll(\"rot\\\\*speed\",\"rotorspeed\");
rot*speed
将替换为
rotorspeed
。