java - 为什么我的 Android 程序中会出现 PatternSyntaxException?

标签 java android regex exception

我有一个 Java 正则表达式 Pattern,由字符串末尾的一组任意字符组成,并具有正向后向查找功能。当我在 Android 之外使用 1.6 JDK 时,它编译并运行得很好,但当我将它放入 Android 应用程序的代码中时,它会抛出 PatternSyntaxException。这是行:

Pattern namePat = Pattern.compile("(?<=DISCOVERY,\\d,[0-9A-F]{12},\\d,[+-][\\d]{3},\\d,[\\d]{4})(.*)$");

这是错误消息:

4784:D/com.example.MyTestApp.DiscoverThread( 4255): java.util.regex.PatternSyntaxException: Look-behind pattern matches must have a bounded maximum length near index 56:
4785:D/com.example.MyTestApp.DiscoverThread( 4255): (?<=DISCOVERY,\d,[0-9A-F]{12},\d,[+-][\d]{3},\d,[\d]{4})(.*)$
4786:D/com.example.MyTestApp.DiscoverThread( 4255):                                                         ^
4787:D/com.example.MyTestApp.DiscoverThread( 4255):     at java.util.regex.Pattern.compileImpl(Native Method)
4788:D/com.example.MyTestApp.DiscoverThread( 4255):     at java.util.regex.Pattern.compile(Pattern.java:411)
4789:D/com.example.MyTestApp.DiscoverThread( 4255):     at java.util.regex.Pattern.<init>(Pattern.java:394)
4790:D/com.example.MyTestApp.DiscoverThread( 4255):     at java.util.regex.Pattern.compile(Pattern.java:381)
4791:D/com.example.MyTestApp.DiscoverThread( 4255):     at com.example.MyTestApp.Parser$DiscoveryParser.<init>(Parser.java:146)
4792:D/com.example.MyTestApp.DiscoverThread( 4255):     at com.example.MyTestApp.DiscoverThread.run(DiscoverThread.java:61)
4793:D/com.example.MyTestApp.DiscoverThread( 4255):     at java.lang.Thread.run(Thread.java:841)

据我所知,后视的长度是完全指定的。我错过了什么吗?该应用程序在 Android 4.4.2 设备上运行

最佳答案

该错误表明您的lookbehind 中的(.*) 具有可变长度,从技术上讲,这不是您的lookbehind 的一部分。我猜想有一些奇怪的事情让它认为你的后视没有关闭,并且 (.*) 是它的一部分,所以它不是固定长度的。

我会删除lookbehind,只依赖第一个捕获组:

DISCOVERY,\d,[0-9A-F]{12},\d,[+-][\d]{3},\d,[\d]{4}(.*)$

关于java - 为什么我的 Android 程序中会出现 PatternSyntaxException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23688394/

相关文章:

java - 如何查找以前运行的作业/任务未在 Spring Batch 中运行?我尝试了一些代码但不确定

javascript - 找到模式并动态构建正则表达式来匹配字符串

java - java中的网页抓取和数据处理

regex - 仅从字符串中提取捕获组

android - 应该在即时应用程序的每个模块中放置哪些依赖项?

java - Maven:如何在 Eclipse 中包含存储库中不可用的 jar?

Java if 或语句未按预期工作

java - 如何使用 Android-Intent 在单击按钮时发送 TextView 数据?

java - 子字符串替换问题

java - 第二个 Activity 仅在手机上崩溃,而不是在模拟器上崩溃