Pattern ptn = Pattern.compile("a*");
Matcher mtch = ptn.matcher("bbaac");
if(mtch.find()){
System.out.println(mtch.group());
}
输出-不输出任何内容
Pattern ptn = Pattern.compile("a+");
Matcher mtch = ptn.matcher("bbaac");
if(mtch.find()){
System.out.println(mtch.group());
}
输出-aa
我知道这是一个非常简单的问题,但是看到
*
和+
(都是贪婪的量词)的行为,我仍然感到困惑。请让我知道为什么在第一种情况下输出不打印任何内容,即
a*
是贪婪的,它应该返回aa
作为匹配项。 最佳答案
代码中唯一的错误是您没有遍历所有找到的Matcher子序列。
while (mtch.find()) { // <-- not if here
System.out.println(mtch.group());
}
模式
"a*"
在匹配您的字符串中的"aa"
之前将匹配两个空字符串,这是预期的,因为*
量词允许出现零次。但是,+
量词将不匹配空字符串,因为它匹配一个或多个出现(tutorial about quantifiers)。 b b a a c
^ ^ ^ ^ ^ <-- matches for case of *