根据Android Studio的建议删除冗余转义导致应用程序崩溃
我有下面的正则表达式根据Android Studio的建议删除冗余转义导致应用程序崩溃,android,regex,unit-testing,Android,Regex,Unit Testing,我有下面的正则表达式 object MyRegtest { val TEST = Pattern.compile("\\{[^{}]+\\}") } 安卓工作室说我有一个多余的逃生通道 按照Android Studio的建议删除它们后,它变成如下所示 object MyRegtest { val TEST = Pattern.compile("\\{[^{}]+}") } 这一切似乎都很好,因为当我运行单元测试时,它编译并运行良好。请注
object MyRegtest {
val TEST = Pattern.compile("\\{[^{}]+\\}")
}
安卓工作室说我有一个多余的逃生通道
按照Android Studio的建议删除它们后,它变成如下所示
object MyRegtest {
val TEST = Pattern.compile("\\{[^{}]+}")
}
这一切似乎都很好,因为当我运行单元测试时,它编译并运行良好。请注意,在更改之前和之后都可以很好地编译
@Test
fun addition_isCorrect() {
val matcher = MyRegtest.TEST.matcher("2 matches {GoOd} and {GrEaT}, not {} to catch")
while (matcher.find()) {
println(matcher.group())
}
}
编译和运行应用程序时(简单示例)
它会崩溃的
Caused by: java.util.regex.PatternSyntaxException: Syntax error in regexp pattern near index 9
\{[^{}]+}
如果我把原始的正则表达式放回原处,编译应用程序,测试工作正常
是我做错了什么,还是这是安卓工作室的错误建议?为什么推荐的优化正则表达式只在单元测试中有效,而在应用程序中崩溃?在Android正则表达式中,您需要在字符类之外转义右大括号,否则,该模式将无效(regexp模式中的
语法错误将按预期显示)
您从Android Studio收到的通知很可能基于Java正则表达式风格,其中}
字符不必在字符类之外转义
因此,在这种情况下,Android Studio在通知“冗余转义”时是错误的,它在Android regex上下文中不是冗余的。我已经向谷歌提交了一个问题
Caused by: java.util.regex.PatternSyntaxException: Syntax error in regexp pattern near index 9
\{[^{}]+}