示例代码:
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()
尝试匹配整个字符串,这对我来说没问题,因为星号给了我零时间。
那么为什么匹配失败?
答案 0 :(得分:3)
模式[0-9]*
表示“匹配0到0的0或更多次”。 如果它看到一个数字,它会将其添加到匹配中。如果它没有看到数字,它仍然会在匹配中添加一个0长度的字符串。这并不意味着匹配任何具有0或更多位数的字符串(因为每个字符串都有0或更多位数,这使得这没有意义)所以在你的字符串Z
中,有两个零长度匹配:一个在字符串的开头,一个在字符串的末尾,两个都有0位。
这意味着find
将返回true两次,而matches
将返回false,因为整个字符串不匹配(请记住有wo匹配!)。
答案 1 :(得分:2)
因为Z
不在班级[0-9]*
中(这应该只匹配0
到9
之间的数字,请检查demo regex),以匹配{ {1}}它应该在班级Z
(demo regex)
[0-9Z]*