Я пытаюсь сопоставить и записать команду и параметры из следующего ввода:

!command param1 param2

Я использую классы Java Pattern и Matcher:

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) для экспериментов ....

Некоторый указатель и помощь оценены!

3
KarlOve Karlsson 22 Дек 2014 в 14:33

2 ответа

Лучший ответ

Лично я бы не стал использовать для этого регулярное выражение. Если ваш ввод

!command param1 param2 paramX

Тогда обычное манипулирование строкой отлично справится с этой задачей. Просто откажитесь от открытия! а затем используйте разделение на ""

5
tddmonkey 22 Дек 2014 в 11:42

Вы можете сделать это с помощью регулярного выражения ..

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

ДЕМО

2
Avinash Raj 22 Дек 2014 в 12:21