2014-02-11 104 views
0
String filter = "startDate:gt(2014-07-31);(status:eq(A)||status:eq(V));endDate:gt(2014-07-31)"; 

String REGEX_MARKETOFFER_FILTER = "(\\(+){1}([A-Za-z]+):([A-Za-z]+)(\\(+)([a-zA-Z0-9-,:]+)(\\)+)(;|\\|\\|)([A-Za-z]+):([A-Za-z]+)(\\(+)([a-zA-Z0-9-,:]+)(\\)+)"; 

    Pattern p = Pattern.compile(REGEX_MARKETOFFER_FILTER); 
    Matcher m = p.matcher(filter); 

     while (m.find()) { 
      System.out.println(m.group()); 
     } 

當我運行上面的代碼,我得到以下的輸出:正則表達式查詢問題

(status:eq(A)||status:eq(V)) 

不過,我期待這個輸出,而不是:

startDate:gt(2014-07-31) 

(status:eq(A)||status:eq(V)) 

endDate:gt(2014-07-31) 

我在做什麼錯誤?

+6

字符串總是看起來像那樣嗎?你只是想在';'分裂嗎? –

+0

對於你的例子,'filter.split(「;」)'就足夠了。 – devnull

回答

0

使用String#split

public static void main(String []args) 
{ 
    String filter = "startDate:gt(2014-07-31);(status:eq(A)||status:eq(V));endDate:gt(2014-07-31)"; 

    String str[]=filter.split(";"); 
} 
0

至於其他人建議使用String#split(";")但如果你真的想這樣做,你的方式用正則表達式解析所有的令牌,並得到具體的信息不再使用下列內容:

String REGEX_MARKETOFFER_FILTER = "(\\()?([A-Za-z]*):([A-Za-z]*)(\\()([a-zA-Z0-9-,:]*)(\\))((\\|\\|)([A-Za-z]*):([A-Za-z]*)(\\()([a-zA-Z0-9-,:]*)(\\))(\\)))?(;)?"; 

希望這會有所幫助。