Java Android中匹配右大括号时出现正则表达式模式错误
我使用java.util.regex.Pattern类来匹配Android程序中的字符串Java Android中匹配右大括号时出现正则表达式模式错误,java,android,regex,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
if(Pattern.matches("\\{\\{.*?}}", element.getValue())) {
...
} else {
...
}
我得到了以下错误
Caused by: java.util.regex.PatternSyntaxException: Syntax error in regexp pattern near index 8
\{\{.*?}}
我正在使用Android studio和开放JDK。为了测试regex表达式,我用Netbeans编写了一个简单的程序,效果很好。Netbeans也使用openjdk
System.out.println(Pattern.matches("\\{\\{.*?}}", "{{hello:sdf}}"));
为什么正则表达式在android项目中出现错误 使用
"\\{\\{.*?\\}\\}"
问题在于Android中使用的正则表达式引擎是一个不同于Java的正则表达式引擎,并且在ICU正则表达式模式中必须转义表示文本开/闭大括号的{
和}
在绝大多数正则表达式中,
}
不必转义,但ICU正则表达式引擎的情况并非如此,它无法根据模式上下文推断}
含义。例如,PCRE、.NET、Python、Java正则表达式在[a-z]}
模式中查找}
,并且由于之前没有{
,他们“知道”它不是ICU的一部分。ICU没有那么聪明。它仍然认为必须有一个{/code>在>之前跟数字
并在未越界时报告错误。我认为您只需要使用如果(element.getValue().matches(“\\{\\{.*}”)
,如果仍然存在问题,请尝试转义}
s。我注意到在api 21之前的版本中java.util.regex
matcher无法正常工作。最好使用com.google.code.regexp