我有以下要捕获的模式
G01或G01-I006或G01-I006-I1或G01-I006-I1-R06或G01-I006-I1-R06-F001

如果输入是G01-I006-I1-R06-F001,我希望有一个捕获组
捕获G 01,I 006,I 1,R 06和F 001

我想出了这种模式:

(([G|I|R|F])[0-9]{1,4}-?){1,}


但是对于G01-I006-I1-R06-F001,捕获组仅包含F001

最佳答案

尝试在所有匹配项之间循环:

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

String input = "G01 G01-I006 G01-I006-I1 G01-I006-I1-R06 G01-I006-I1-R06-F001";

final Pattern pattern = Pattern.compile("([GIRF])([0-9]{1,4})-?");
Matcher m = pattern.matcher(input);
while(m.find()) {
    System.out.println(m.group(1) + " " + m.group(2));
}

10-06 09:06