一尘不染

正则表达式无法使用带星号的matchs()模式

java

示例代码:

    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()打印错误。星号表示零次或多次,为什么matches()产生假?

matches() 尝试匹配整个字符串,对我来说还可以,因为星号给我零时间。

那为什么比赛失败呢?


阅读 336

收藏
2020-12-03

共1个答案

一尘不染

模式显示为[0-9]*“匹配0或0到0多次”。 如果看到数字,它将添加到匹配项中。
如果没有看到数字,它仍将0长度的字符串添加到匹配项中。
这并不意味着匹配任何具有0个或多个数字的字符串(因为每个字符串具有0个或多个数字,这使这一点毫无意义),因此在您的字符串中Z,有两个零长度的匹配项:一个在字符串的开头,一个在字符串的结尾,两者都有0位数字。

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

2020-12-03