[英]replace special character }} in a string with “” using regexp in java
我试图在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("");
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)"), "");
我不确定是否必须严格加上}
字符,但是如果没有必要,则将其无害。
不要使用Pattern.quote
,使用原义的正则表达式模式,并转义括号:
Stringbuffer = obj.toJSONString() + ",";
String result = buffer.replaceAll("(?<![\\w\\d])\\}\\}(?![\\w\\d])", "");
使用Pattern.quote
告诉正则表达式引擎将字符串视为文字。 这的确意味着不必将方括号括起来,但也会使您的环顾四周呈现为文字文本,可能不是您想的那样。
方法2仍然需要转义特殊字符}
Pattern.compile("(?<![\\w\\d])\\}\\}(?![\\w\\d])").matcher(buffer).replaceAll("");
您能用Apache StringUtils尝试一下吗? 它的速度更快,并且应该适合您的情况。 请找到以下链接以供参考。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.