在我的应用中,我想删除"example"
之间的所有文本以及字符串后}
之后的第一次出现的文本。我想为所有事情做这件事。所以我使用这段代码:
myString.replaceAll("\"example\"(.+?)}", "");
然而,这给了我一个PatternSyntaxException
。为什么?并且:我该如何解决?
堆栈跟踪:
05-10 23:32:16.129: W/System.err(724): java.util.regex.PatternSyntaxException: Syntax error in regexp pattern near index 16:
05-10 23:32:16.129: W/System.err(724): "example"(.+?)}
05-10 23:32:16.129: W/System.err(724): ^
05-10 23:32:16.159: W/System.err(724): at java.util.regex.Pattern.compileImpl(Native Method)
05-10 23:32:16.190: W/System.err(724): at java.util.regex.Pattern.compile(Pattern.java:400)
05-10 23:32:16.190: W/System.err(724): at java.util.regex.Pattern.<init>(Pattern.java:383)
05-10 23:32:16.219: W/System.err(724): at java.util.regex.Pattern.compile(Pattern.java:374)
05-10 23:32:16.219: W/System.err(724): at java.lang.String.replaceAll(String.java:1784)
...
答案 0 :(得分:2)
好的,所以我不明白为什么这会产生异常,但似乎你需要做的就是逃避最后一个花括号。而不是
myString.replaceAll("\"example\"(.+?)}", "");
你做了
myString.replaceAll("\"example\"(.+?)\\}", "");
^^
第一个字符串在Java 1.7.0_51和1.8.0_05中为我工作,所以我不确定这是怎么发生的......但它有效吗?
答案 1 :(得分:0)
"\\\"example\\\"(.+?)}"
应该有效。您的字符串将转换为模式,这意味着它将处理两次转义字符。因此,您需要为\\
键入\
,为\"
键入"
。