我正在尝试匹配并捕获以下输入中的命令和参数:
!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)来试验......
一些指针和帮助赞赏!
答案 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