0

在我的应用程序中,我想从字符串中删除介于两者之间的所有文本"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)
...
4

2 回答 2

2

好的,所以我不明白为什么这会出现异常,但是您似乎需要做的是转义最后一个花括号。所以而不是

myString.replaceAll("\"example\"(.+?)}", "");

你做

myString.replaceAll("\"example\"(.+?)\\}", "");
                                     ^^

第一个字符串在 Java 1.7.0_51 和 1.8.0_05 中为我工作,所以我不确定这是怎么发生的......但它有效吗?

于 2014-05-10T22:31:43.340 回答
0
"\\\"example\\\"(.+?)}"

应该管用。您的字符串将被转换为模式,这意味着它将处理转义字符两次。所以你需要输入\\for\\"for "

这是示例http://www.myregextester.com/?r=ab9d1f06

于 2014-05-10T21:48:46.583 回答