正则表达式:在重复多次的标签之间拉出许多子字符串

Regex: pulling out many substrings between tags repeated many times

我有一个格式的数据:

CODE FIRSTTYPE: [DATA OF FIRST TYPE] SECONDTYPE: [DATA OF SECOND TYPE]

我想把它拆分成这样:

CODE
FIRSTYPE:
DATA OF FIST TYPE 
SECONDTYPE: 
DATA OF SECOND TYPE

谁能帮我做这个?

提前致谢!

编辑:

我试过这个:

(\[\s*(((?!\[|\]).)+)\s*\])

不过好像只做了一次,而且还去掉了其他的词。

这是一个可能的解决方案,它基于将方括号或非空白序列之间的文本匹配到捕获组中:

String str = "CODE FIRSTTYPE: [DATA OF FIRST TYPE] SECONDTYPE: [DATA OF SECOND TYPE]";
Pattern r = Pattern.compile("\[([^\]]*)\]|(\S+)");
Matcher matcher = r.matcher(str);
List<String> arr = new ArrayList<String>();
while (matcher.find()) {
    if (matcher.group(1) == null)
       arr.add(matcher.group(2));
    else
        arr.add(matcher.group(1));
}
// PRINT FOR DEMO
String[] simpleArray = new String[arr.size()];
arr.toArray(simpleArray);
for (String s : simpleArray) { System.out.println(s); }

这里是IDEONE demo

正则表达式是

\[([^\]]*)\]|(\S+)

regex demo

如果格式保持不变,此方法有效:

String name="CODE FIRSTTYPE: [DATA OF FIRST TYPE] SECONDTYPE: [DATA OF SECOND TYPE]";
Pattern pat=Pattern.compile("(\w+)\s(\w+:)\s\[([\w+\s]*)\]\s(\w+:)\s\[([\w+\s]*)\]");
Matcher mat=pat.matcher(name);
while(mat.find()){
    System.out.println(mat.group(1));
    System.out.println(mat.group(2));
    System.out.println(mat.group(3));
    System.out.println(mat.group(4));
    System.out.println(mat.group(5));
}