2011-06-14 140 views
2

我试图让每一个简单的正则表达式的重复比赛中的Java:Java的重复模式匹配

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

其包含在[],只要它不包含[任意字符串匹配字符。例如,它会匹配

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

之前没有多少存在这样的群体知识,我无法找到通过模式匹配器访问各个匹配组的方式,即不能获得

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

(或者,甚至更好,而括号中的文字),在4名不同的字符串。

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

当然必须有在Java中这样做的一个简单的方法,我很想念?

感谢您的任何帮助。

回答

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)); 
    } 
+0

请您解释一下您的正则表达式?谢谢。 – 2012-09-17 05:00:01

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; 
    } 

} 
+0

请你解释一下你的正则表达式? – 2012-09-30 14:33:50

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]