首页 > 解决方案 > Android API 28 Pattern.compile 总是抛出异常

问题描述

String pattern = "\\{(*.)\\{";
Pattern.compile(pattern).matcher("Some string");

因非法状态异常而崩溃。

当我浏览 Pattern 类的源代码时,方法 compile ,它只有一个语句,即 throw 语句。并返回运行时异常

是意味着 android 阻止了 Pattern 类。如果是,是否有任何其他方式使用 Java 正则表达式的 Pattern 类

标签: android

解决方案


当我浏览 Pattern 类的源代码时,方法 compile ,它只有一个语句,即 throw 语句。并返回运行时异常

因为你还没有下载 Android API 28 的源代码。你应该去下载它SDK Manager然后重新启动IDE你会看到完整的源代码。

根本原因:您的模式在 Java 和 Android中也不是有效的正则表达式

解决方案 1:将正则表达式更改为

String pattern = "\\{(.*)\\{";

解决方案 2:如果要在正则表达式中添加“(”或“)”,则必须在此之前使用“\\”

String pattern = "\\{\\(*.\\)\\{";

奖励:请参阅链接以了解有关正则表达式的更多信息。

更新 1:根据您的示例,我猜您想获取大括号内的值

String title = "Not your billing ZIP code? {Update your address on file.}";

String pattern = ".*\\{(.*)\\}";
Matcher matcher = Pattern.compile(pattern).matcher(title);
if (matcher.matches()) {
       Log.d("regex_test", matcher.group(0));
       Log.d("regex_test", matcher.group(1));
} else {
       Log.d("regex_test", "not match");
}

输出:

08-13 15:26:12.132 6516-6516/com.example.pc.myapplication D/regex_test: Not your billing ZIP code? {Update your address on file.}
08-13 15:26:12.132 6516-6516/com.example.pc.myapplication D/regex_test: Update your address on file.

推荐阅读