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

时间:2018-09-05 21:48:43

标签: java regex

我正在尝试使用正则表达式来解析类型为cs=1的输入字符串,但是我似乎无法弄清楚如何在忽略“ move”关键字的同时获取所有命令组。

我的正则表达式是:

t=3

我的Java代码是这样:

cs

在循环中,我希望第一个命令为t,第二个命令为cs。使用现在的正则表达式,我只能得到"move 2 up;1 right;1 down"。这里有一些输入示例:https://regex101.com/r/Fg0hk3/3

如何修复我的正则表达式?


最终使用2种正则表达式模式,一种用于完全匹配,一种用于令牌:

完全匹配:

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

代币:

String str = "move 1 right;2 left;";
String regex = "(?:\\bmove\\b) ((?<amount>[1-6]) (?<direction>(\\bup\\b|\\bright\\b|\\bdown\\b|\\bleft\\b))(?:;?))+";
Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
Matcher match = pattern.matcher(str);
while (match.find()) {
    String group = match.group(1);
    System.out.println(group);
}

1 个答案:

答案 0 :(得分:0)

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

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]