我试图用java中的regexp替换字符串中的特殊字符}},我厌倦了以下两种方法而且它不起作用。请告诉我这些陈述有什么问题。
注意字符串也包含}我想保留。目标是只替换}}
方法1
String buffer = obj.toJSONString() + ",";
String result = buffer.replaceAll(Pattern.quote("(?<![\\w\\d])}}(?![\\w\\d])"), "");
方法2
Pattern.compile("(?<![\\w\\d])}}(?![\\w\\d])").matcher(buffer).replaceAll("");
答案 0 :(得分:3)
以下quote
:
String result = buffer.replaceAll(Pattern.quote("(?<![\\w\\d])}}(?![\\w\\d])"), "");
表示将正则表达式视为文字字符串。那是错的。
如果您只是想删除所有}}
而不考虑上下文:
String result = buffer.replaceAll(Pattern.quote("}}"), "");
如果您做需要尊重上下文,请不要Pattern.quote(...)
正则表达式!
另一个问题在于您尝试指定字符类的方式。由于\d
是\w
的子集,因此无需将它们组合在一起。只需这样做:
String result = buffer.replaceAll("(?<!\\w)\\}\\}(?!\\w)"), "");
我不确定引用}
字符是否完全必要,但如果没有必要,则无害。
答案 1 :(得分:1)
不要&#39;使用RUN mkdir -p $CATALINA_HOME/logs
,使用文字正则表达式模式,并转义括号:
Pattern.quote
使用Stringbuffer = obj.toJSONString() + ",";
String result = buffer.replaceAll("(?<![\\w\\d])\\}\\}(?![\\w\\d])", "");
告诉正则表达式引擎将字符串视为文字。这确实意味着括号不必被转义,但它也会使你的外观成为文字文本,可能不是你想到的。
答案 2 :(得分:0)
方法2仍然需要转义特殊字符}
Pattern.compile("(?<![\\w\\d])\\}\\}(?![\\w\\d])").matcher(buffer).replaceAll("");
答案 3 :(得分:0)
请与Apache StringUtils一样尝试。它更快,应该适用于您的情况。请查找以下链接以供参考。