匹配右括号时Android中的正则表达式模式错误

时间:2017-07-13 08:02:40

标签: java android regex

我正在使用java.util.regex.Pattern类来匹配Android程序中的字符串。

if(Pattern.matches("\\{\\{.*?}}", element.getValue())) {
   ...             
} else {
   ...
}

我收到以下错误。

 Caused by: java.util.regex.PatternSyntaxException: Syntax error in regexp pattern near index 8
                                                                  \{\{.*?}}

我正在使用Android studio和Open JDK。为了测试正则表达式,我在Netbeans中编写了一个简单的程序,它运行正常。 Netbeans也使用openjdk。

System.out.println(Pattern.matches("\\{\\{.*?}}", "{{hello:sdf}}"));

为什么正则表达式在android项目中出错?

1 个答案:

答案 0 :(得分:3)

使用

"\\{\\{.*?\\}\\}"

问题是Android中使用的正则表达式引擎是ICU engine,与Java不同,而 <{strong> {}代表文字必须以ICU正则表达式模式转义打开/关闭花括号。

在绝大多数正则表达式中,}不必转义,但ICU正则表达式引擎不能基于模式上下文推断出}含义。例如。 PCRE,.NET,Python,Java正则表达式以}模式查找[a-z]},之前没有{,他们“知道”它不是limiting quantifier construct的一部分。 ICU并不那么聪明。它仍然认为在{之前必须有}跟随数字,如果未转义则报告错误。