Java重复模式匹配

时间:2011-06-14 07:26:38

标签: java design-patterns matching repeat

我试图在Java中获得一个简单正则表达式的每个重复匹配:

(\\[[^\\[]*\\])*

匹配[]中包含的任何字符串,只要它不包含[字符。例如,它匹配

[a][nice][repetitive][pattern]

没有先验知道存在多少这样的组,我找不到通过模式匹配器访问各个匹配组的方法,即无法获取

[a], [nice], [repetitive], [pattern]

(或者,更好的是没有括号的文本),有4个不同的字符串。

使用pattern.matcher()我总是得到最后一组。

肯定有一种简单的方法可以在Java中实现这一点,我不知道了吗?

感谢您的帮助。

4 个答案:

答案 0 :(得分:5)

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

http://download.oracle.com/javase/6/docs/api/java/util/regex/Matcher.html#find%28%29

答案 1 :(得分:5)

    String string = "[a][nice][repetitive][pattern]";
    String regexp = "\\[([^\\[]*)\\]";
    Pattern pattern = Pattern.compile(regexp);
    Matcher matcher = pattern.matcher(string);
    while (matcher.find()) {
        System.out.println(matcher.group(1));
    }

答案 2 :(得分:2)

我会使用拆分

String string = "[a][nice][repetitive][pattern]";
String[] words = string.substring(1, string.length()-1).split("\\]\\[");
System.out.println(Arrays.toString(words));

打印

[a, nice, repetitive, pattern]

答案 3 :(得分:1)

这是我的尝试:)

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Foo {
    public static void main(String[] args) {
        final String text = "[a][nice][repetitive][pattern]";
        System.out.println(getStrings(text)); // Prints [a, nice, repetitive, pattern]
    }

    private static final Pattern pattern = Pattern.compile("\\[([^\\]]+)]");

    public static List<String> getStrings(final String text) {
        final List<String> strings = new ArrayList<String>();
        final Matcher matcher = pattern.matcher(text);
        while(matcher.find()) {
            strings.add(matcher.group(1));
        }
        return strings;
    }

}