2013-09-30 115 views
0

我試圖用一個簡單的正則表達式匹配patttern但得到一些意想不到的結果......正則表達式的「貪婪」檢查

的搜索模式和結果如下,

public class Test { 

    public static void main(String[] args) throws IOException { 
     Pattern p = Pattern.compile(".*xx"); 
     Matcher m = p.matcher("yyxxxyxx"); 
     while (m.find()){ 
      System.out.println("match start"); 
      System.out.println("Start = " + m.start()); 
      System.out.println("End = " + m.end()); 
      System.out.println("Group = " + m.group()); 

     } 

    } 
} 

結果:

match start 
Start = 0 
End = 8 
Group = yyxxxyxx 

預期結果:

match start 
Start = 0 
End = 4 
Group = yyxx 
match start 
Start = 4 
End = 8 
Group = xyxx 

有人可以解釋正則表達式的運作方式嗎?

回答

1

正如你在提問題中提到的那樣,*這裏是貪婪的。這意味着它將盡可能多的字符,而它仍然可以匹配。你只需要添加?就可以了。

.*?xx 
1

貪婪意味着它會盡可能地去決定是否找到了整個羣體。你的正則表達式基本上是這樣寫的:「任何由'xx'結尾的字符數」。由於整個字符串與該描述相匹配,因此將整個字符串作爲一個組來使用。

也許你打算使用懶惰的匹配而不是貪婪的匹配?