2016-02-28 11 views
0

我有以下字符串:Java的正則表達式小組賽 - 字符串沒有空格

{"asdasdasdsd"["$[day()]$"],"asdasd":"$[time()]$","day":"$[day()]$","asdasdasd":["$[random(4,5)]$"]} 

我想我的前綴和後綴裏面的字符串。 的問題是,該字符串不空格,所以我只能得到一組:

private String prefix = "\\$\\["; //$[ 
    private String suffix = "\\]\\$"; //]$ 
    private String regexString = prefix + ".*" + suffix; 

    try { 
     Pattern regex = Pattern.compile(regexString); 
     Matcher regexMatcher = regex.matcher(json); 
     while (regexMatcher.find()) { 
      System.out.println(regexMatcher.start()+ ": " + regexMatcher.group()); 
      for (int i = 1; i <= regexMatcher.groupCount(); i++) { 
       System.out.println(regexMatcher.group(i)); 
       System.out.println(regexMatcher.start(i)); 
       System.out.println(regexMatcher.end(i)); 
      } 
     } 
    } catch (PatternSyntaxException ex) { 
     ex.printStackTrace(); 
    } 

輸出爲:

17: $[day()]$"],"asdasd":"$[time()]$","day":"$[day()]$","asdasdasd":["$[random(4,5)]$ 

我所要的輸出是:

day() 
time() 
day() 
random(4,5) 

我該如何處理?

回答

1

沒有組,因爲您的模式中沒有(...)

.*也不能正常工作,因爲您需要非的非貪婪匹配。

更改此:

String regexString = prefix + ".*" + suffix; 

要這樣:

String regexString = prefix + "(.*?)" + suffix; 

在任何情況下,這將是更好的使用比正則表達式JSON解析庫。

相關問題