2013-05-30 24 views
3

我被限定使用Java的模式困惑: 的第一段代碼:預選賽中的使用模式

private void testRegex(String patternString) { 
    Pattern pattern = Pattern.compile(patternString); 
    Matcher matcher = pattern.matcher("::::::::"); 
     if (matcher.find()) { 
      Log.d("regex", matcher.group()); 
     } else { 
      Log.d("regex", "not match"); 
    } 
} 

然後我嘗試testRegex(":?")testRegex(":*")testRegex(":+")分別; 結果是:

":","::::::::","::::::::"; 

這是絕對正確的,我知道,但是:

我嘗試另一塊下面的代碼:

private void testRegex(String patternString) { 
    Pattern pattern = Pattern.compile(patternString); 
    Matcher matcher = pattern.matcher("sip::::::::"); 
     if (matcher.find()) { 
      Log.d("regex", matcher.group()); 
     } else { 
      Log.d("regex", "not match"); 
    } 
} 

結果是:

""(empty String),""(empty String),"::::::::" 

誰可以告訴我地球上發生了什麼?先謝謝你!

回答

5

?*運營商也有零發生部分在它們的功能,當第一個字符不匹配,他們會停在那裏,因爲它們匹配0倍,這是允許的。

:? 

Regular expression image

:* 

Regular expression image

[見,他們必須繞過:路由]

:+ 

Regular expression image

:+的情況下,它只能嘗試1或更多,這意味着它會試圖找到這個存在的:的一次出現,一旦它有了它,它會消耗所有以下的:,如果它能找到它們的話。沒有路線可以繞過:

+1

+1表示圖。 –

+0

另有+1圖片說明。 – NeverHopeless

+0

真的很生動!我可以問一下如何製作這樣的圖表嗎? –