在我的应用程序中,我想从字符串中删除"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)
...
好的,所以我不明白为什么会出现异常,但似乎你需要做的是转义最后一个大括号。所以不是
myString.replaceAll(""example"(.+?)}", "");
你做
myString.replaceAll(""example"(.+?)\}", "");
^^
第一个字符串在Java 1.7.0_51和1.8.0_05中对我有效,所以我不确定这是怎么发生的。。。但它有效吗?
"\"example\"(.+?)}"
应该起作用。您的字符串将被转换为模式,这意味着它将处理两次转义字符。因此您需要为键入
\
,为"
键入"
。
这是一个例子http://www.myregextester.com/?r=ab9d1f06