2012-03-28 85 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被排除在每個匹配項之外。