问题描述
|
即您是如何做到的?
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
。