2012-03-28 96 views
2

我知道?是一个贪婪的量词,而??是它的勉强之一。 当我如下使用它时,它总是给我一个空的输出?是否因为它总是从左到右运行(首先查看零点出现,然后是匹配的出现点)还是另一个?拒绝量词的行为原因?在java正则表达式

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 

回答

3

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

尝试匹配零个字符总是会成功,所以对于只包含单个不情愿元素的正则表达式没有任何用处。

3

我不知道有关Java实现,但regular-expressions.info指出这为??

使得前面的项可选。懒惰,所以可能的项目被排除在比赛如果可能。由于使用有限,此构造经常被排除在文档之外。

因此,您会得到4个匹配项(3个字符的位置+空白字符串),可选a被排除在每个匹配项之外。