Java正则表达式获取所有匹配组

Java正则表达式获取所有匹配组,java,regex,Java,Regex,我试图使用正则表达式解析类型为“move 2 up;1 right;1 down”的输入字符串,但我似乎不知道如何在忽略“move”关键字的情况下获取所有命令组 我的正则表达式是: (?:\bmove\b) ((?<amount>[1-6]) (?<direction>(\bup\b|\bright\b|\bdown\b|\bleft\b))(?:;?))+ 代币: (?<amount>[1-6]) (?<direction>(?:\bup\b|

我试图使用正则表达式解析类型为“move 2 up;1 right;1 down”的输入字符串,但我似乎不知道如何在忽略“move”关键字的情况下获取所有命令组

我的正则表达式是:

(?:\bmove\b) ((?<amount>[1-6]) (?<direction>(\bup\b|\bright\b|\bdown\b|\bleft\b))(?:;?))+
代币:

(?<amount>[1-6]) (?<direction>(?:\bup\b|\bright\b|\bdown\b|\bleft\b))
(?[1-6])(?(?:\bup\b | \bright\b | \bdown\b | \bleft\b))

最简单的方法是创建一个正则表达式,只匹配所需的部分(数字和方向),而不使用“移动”或分号。然后将其与字符串匹配,并将所有组添加到列表中

String str = "move 55 up;2 right;100 down;8 left";
String regex = "(\\d+ (?:up|down|left|right))";
List<String> matches = new ArrayList<String>();
Matcher m = Pattern.compile(regex).matcher(str);

while (m.find()) {
    matches.add(m.group());
}

System.out.println(matches);
// Output: [55 up, 2 right, 100 down, 8 left]
String str=“向上移动55;向右移动2;向下移动100;向左移动8”;
字符串regex=“(\\d+(?:上|下|左|右))”;
列表匹配项=新的ArrayList();
Matcher m=Pattern.compile(regex).Matcher(str);
while(m.find()){
匹配。添加(m.group());
}
System.out.println(匹配项);
//输出:[55上,2右,100下,8左]

是的,这是获取所需所有组的好方法,但如果我想验证整个输入字符串,是否需要使用第二个正则表达式(如我的初始正则表达式)?不可能匹配整个字符串,因为Java中的正则表达式不支持重复捕获的组。如果您尝试,它将只匹配第一个和最后一个捕获的组,而不是所有组。更多信息请参见和。好的,使用两种正则表达式模式,一种用于完整匹配,另一种用于组,似乎已经成功了。谢谢你,亚当!
(?<amount>[1-6]) (?<direction>(?:\bup\b|\bright\b|\bdown\b|\bleft\b))
String str = "move 55 up;2 right;100 down;8 left";
String regex = "(\\d+ (?:up|down|left|right))";
List<String> matches = new ArrayList<String>();
Matcher m = Pattern.compile(regex).matcher(str);

while (m.find()) {
    matches.add(m.group());
}

System.out.println(matches);
// Output: [55 up, 2 right, 100 down, 8 left]