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

示例代码:

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

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

因为Z不在类[0-9]* (这应该只匹配09之间的数字检查演示正则表达式 ),要匹配Z它应该在类[0-9Z]* ( 演示正则表达式 )中

 Pattern pt = Pattern.compile("[0-9Z]*");