2013-04-16 167 views
0

我想匹配Java中字符串的模式。字符串的格式將如此。java中的正則表達式匹配

「INSERT%ABC%DEF%%」

我希望能夠把字符串ABC和DEF兩個組

public void parseInput(String input){ 
    Pattern p = Pattern.compile("?: .* %(.*)%)*"); 
    Matcher m = p.matcher(input); 
    String s1 = m.group(1); 
    String s2 = m.group(2); 
} 

我到目前爲止打得四處 '%' 之間,並繼續得到語法錯誤。在這種情況下,這一直是我最近一次嘗試,已經得到了懸空元字符錯誤信息

回答

4

它發現你可以使用.find()方法,它將繼續通過您的字符串會和收益:

String str = "INSERT %ABC% %DEF%"; 
    Pattern p = Pattern.compile("%(.*?)%"); 
    Matcher m = p.matcher(str); 
    while(m.find()) 
    { 
     System.out.println(m.group(1)); 
    } 

產量:

ABC

DEF

編輯:正如一個供參考,有像這樣的模式:%(.*)%,會讓你的正則表達式貪婪,這意味着它將會停止匹配,一旦發現最後%(從而產生ABC% %DEF)。添加*操作後?運營商(根據我的例子)會讓你的模式非貪婪,它將在它找到的第一個%停止。

+0

啊,謝謝!這工作得很好。也不知道貪婪和非貪婪正則表達式的區別 – Nopiforyou

+0

@Nopiforyou:不客氣。在使用'*'和'+'運算符時,需要注意貪婪。 – npinti