正则表达式无法匹配()模式与星号

时间:2017-11-01 06:58:25

标签: java regex

示例代码:

    String test = "Z";
    Pattern pt = Pattern.compile("[0-9]*");
    Matcher mc = pt.matcher(test);
    System.out.println(mc.find());
    System.out.println(mc.matches());

据我所知,它应该打印两个真实的。但是,matches()打印为false。 星号表示零次或多次,为什么matches()产生错误?

matches()尝试匹配整个字符串,这对我来说没问题,因为星号给了我零时间。

那么为什么匹配失败?

2 个答案:

答案 0 :(得分:3)

模式[0-9]*表示“匹配0到0的0或更多次”。 如果它看到一个数字,它会将其添加到匹配中。如果它没有看到数字,它仍然会在匹配中添加一个0长度的字符串。这并不意味着匹配任何具有0或更多位数的字符串(因为每个字符串都有0或更多位数,这使得这没有意义)所以在你的字符串Z中,有两个零长度匹配:一个在字符串的开头,一个在字符串的末尾,两个都有0位。

这意味着find将返回true两次,而matches将返回false,因为整个字符串不匹配(请记住有wo匹配!)。

答案 1 :(得分:2)

因为Z不在班级[0-9]*中(这应该只匹配09之间的数字,请检查demo regex),以匹配{ {1}}它应该在班级Zdemo regex

[0-9Z]*