Regex pattern SyntaxException



在我的应用程序中,我想从字符串中删除"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

最新更新