2

我知道这?是一个贪婪的量词,并且??是不情愿的。当我按如下方式使用它时,它总是给我一个空输出?是因为它总是从左到右运行(首先查看零出现然后匹配出现)还是另一个?

    Pattern pattern = Pattern.compile("a??");
    Matcher matcher = pattern.matcher("aba");
    while(matcher.find()){
        System.out.println(matcher.start()+"["+matcher.group()+"]"+matcher.end());
    }

输出 :

0[]0
1[]1
2[]2
3[]3
4

2 回答 2

3

我不确定 Java 的实现,但regular-expressions.info说明了这一点??

使前面的项目可选。懒惰,所以如果可能的话,可选项目会被排除在匹配项中。由于其用途有限,此构造通常被排除在文档之外。

因此,您得到 4 个匹配项(3 个字符位置 + ent 处的空字符串),并且a每个匹配项都排除了可选项。

于 2012-03-28T16:30:31.100 回答
3

您的正则表达式可以解释如下:“尝试匹配零个字符,如果失败则尝试匹配一个'a'字符”。

尝试匹配零个字符总是会成功,因此只包含一个不情愿元素的正则表达式实际上没有任何意义。

于 2012-03-28T16:32:10.853 回答