Я пытаюсь сопоставить и записать команду и параметры из следующего ввода:
!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) для экспериментов ....
Некоторый указатель и помощь оценены!
2 ответа
Лично я бы не стал использовать для этого регулярное выражение. Если ваш ввод
!command param1 param2 paramX
Тогда обычное манипулирование строкой отлично справится с этой задачей. Просто откажитесь от открытия! а затем используйте разделение на ""
Вы можете сделать это с помощью регулярного выражения ..
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
Похожие вопросы
Связанные вопросы
Новые вопросы
java
Java — это высокоуровневый объектно-ориентированный язык программирования. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег часто используется вместе с другими тегами для библиотек и/или фреймворков, используемых разработчиками Java.
<param>
. Этот вопрос, вероятно, является дубликатом: Регулярное выражение - захват всех повторяющихся групп