2012-10-23 33 views
3

示例代碼

Pattern p = Pattern.compile("\\d?"); 
Matcher m = p.matcher("ab34ef"); 
boolean b = false; 
while (m.find()) 
{ 
    System.out.print(m.start());// + m.group()); 
} 

答案:012456

但字符串總長度爲6。因此如何m.start將在輸出給6,如指數從0正則表達式「\ d?」讓不正確的輸出

開始

回答

3

\d?匹配零個或一個字符,因此它會以字符串的最後一個字符開始,因爲它是零寬度匹配。

請注意,您的輸出結果實際上不是\d?,而是\d*。您應該更改其中一個或另一個以使問題自成一體。

1

\d?匹配零個或一個數字,匹配每個數字,但也匹配每個字符的邊界。

嘗試匹配至少一個位:

Pattern p = Pattern.compile("\\d+");