我正在使用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项目中出错?
答案 0 :(得分:3)
使用
"\\{\\{.*?\\}\\}"
问题是Android中使用的正则表达式引擎是ICU engine,与Java不同,而 <{strong> {
和}
代表文字必须以ICU正则表达式模式转义打开/关闭花括号。
在绝大多数正则表达式中,}
不必转义,但ICU正则表达式引擎不能基于模式上下文推断出}
含义。例如。 PCRE,.NET,Python,Java正则表达式以}
模式查找[a-z]}
,之前没有{
,他们“知道”它不是limiting quantifier construct的一部分。 ICU并不那么聪明。它仍然认为在{
之前必须有}
跟随数字,如果未转义则报告错误。