正则表达式模式SyntaxException

时间:2014-05-10 21:39:25

标签: java android regex replaceall patternsyntaxexception

在我的应用中,我想删除"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)
...

2 个答案:

答案 0 :(得分:2)

好的,所以我不明白为什么这会产生异常,但似乎你需要做的就是逃避最后一个花括号。而不是

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

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

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

答案 1 :(得分:0)

"\\\"example\\\"(.+?)}"

应该有效。您的字符串将转换为模式,这意味着它将处理两次转义字符。因此,您需要为\\键入\,为\"键入"

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