gpt4 book ai didi

java - Android 匹配右大括号时出现正则表达式模式错误

转载 作者:行者123 更新时间:2023-12-01 18:34:14 25 4
gpt4 key购买 nike

我正在使用 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项目中出错?

最佳答案

使用

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

问题在于 Android 中使用的正则表达式引擎是 ICU engine这与 Java 不同,并且表示文字左/右大括号的 {} 都必须在 ICU 正则表达式模式中进行转义。

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

关于java - Android 匹配右大括号时出现正则表达式模式错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60091869/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com