Java-regex匹配group - 不带空格的字符串

时间:2016-02-28 16:44:43

标签: java regex pattern-matching

我有以下字符串:

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

我想在前缀和后缀中加入字符串。 问题是String不是空格,所以我只得到一个组:

    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 个答案:

答案 0 :(得分:1)

没有群组,因为您的模式中没有(...)

.*也无法正常使用,因为您希望与.*?进行非贪婪匹配。

改变这个:

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

对此:

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

在任何情况下,使用JSON解析库比使用正则表达式更好。