Java使用正则表达式在空间上分裂?

时间:2014-12-22 11:33:01

标签: java regex

我正在尝试匹配并捕获以下输入中的命令和参数:

!command param1 param2

我正在使用Java的课程PatternMatcher

private Pattern regExp = Pattern.compile(
        "^!(?<command>[^\\s]*)((?:\\s+)(?<param>[^\\s]*))*$");

public String command() {
    m = regExp.matcher(getMsg());
    return m.matches() ? m.group("command") : "";
}

public String param(int index) {
    return m.group(index);
}

也使用此(http://fiddle.re/yanta6)来试验......

一些指针和帮助赞赏!

2 个答案:

答案 0 :(得分:5)

就我个人而言,我不会使用正则表达式。如果您的输入是

!command param1 param2 paramX

然后正常的字符串操作可以很好地完成工作。只是丢弃开场!然后在&#34;上使用拆分&#34;

答案 1 :(得分:2)

你可以通过正则表达式来实现这一目标。

Pattern pattern = Pattern.compile("(?:^!(?<Command>\\S+)|)\\s+(?<params>\\S+)");
String input = "!command param1 param2 param3 paramn param3 param4";
Matcher matcher = pattern.matcher(input);
while(matcher.find())
{
    if(matcher.group("Command") != null)
    {
    System.out.println(matcher.group("Command"));
    }
    if(matcher.group("params") != null)

    System.out.println(matcher.group("params"));
}

输出:

command
param1
param2
param3
paramn
param3
param4

DEMO