java - 在 Android 上使用正则表达式实现部分匹配时遇到问题

标签 java android regex dalvik

我正在创建一个正则表达式来评估 IP 地址是否为有效的多播地址。此验证在您键入时实时发生(如果您键入无效/超出范围的字符,则不被接受)因此我不能简单地根据正则表达式评估最终结果。我遇到的问题是它允许在每组数字(224..、224.0..、224.0.0.. 都显示为有效)之后有一个双周期。

下面的代码是正在发生的事情的静态表示。 224.. 以某种方式显示为合法值。我已经在线测试了这个正则表达式(非 java'ized: ^2(2[4-9]|3\d)(.(25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}$ ),它运行良好,不接受我描述的无效输入。

Pattern p = Pattern.compile("^2(2[4-9]|3\\d)(\\.(25[0-5]|2[0-4]\\d|[0-1]?\\d?\\d)){3}$");
Matcher m = p.matcher("224..");


if (!m.matches() && !m.hitEnd()) {
    System.out.println("Invalid");
} else {
    System.out.println("Valid");
}

每当我输入 224.. 时,方法 m.hitEnd() 的计算结果似乎都为真,这对我来说没有意义。 如果有人可以检查一下并确保我没有犯任何明显的错误,并且可能会解释为什么 hitEnd() 在这种情况下返回 true,我将不胜感激。 谢谢大家。

最佳答案

在 self 评估之后(发现这是在 Android 上),我意识到相同的代码在 Dalvik 上的响应与在常规 JVM 上的响应不同。

代码是:

   Pattern p = Pattern.compile("^2(2[4-9]|3\\d)(\\.(25[0-5]|2[0-4]\\d|[0-1]?\\d?\\d)){3}$");
    Matcher m = p.matcher("224..");

    if (!m.matches() && !m.hitEnd()) {
        System.out.println("Invalid");
    } else {
        System.out.println("Valid");
    }

此代码(尽管稍作修改)在 Android 上打印有效,在 JVM 上打印无效。

关于java - 在 Android 上使用正则表达式实现部分匹配时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7085389/

相关文章:

java - Gradle 任务在 GitLab CI main 方法上失败,找不到

javascript - 如何从前端向 Spring 发出 HTTP POST 请求?

java - 在我单击 SearchView 之前,ListView 不会显示

java - 方法完成后故意使 JUnit 测试失败

regex - 使用正则表达式模式解析日志文件中的数据

java.lang.NoClassDefFoundError : how do I fix this error? 错误

android - Dagger 2 的单例共享首选项

Android自定义 View 位图内存泄漏

javascript - 匹配由单个空格分隔的单词,开头或结尾没有空格

c# - Regex.Split 问题