gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 13:44:39 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 不同,both {} 表示文字开/关花括号必须在 ICU 正则表达式模式中转义。

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

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

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