提问人:FairOPShotgun 提问时间:5/25/2021 最后编辑:FairOPShotgun 更新时间:6/19/2021 访问量:111
如何使用 Java 检查正则表达式中的多个 [args]?
How do I check for multiple [args] in a regex with Java?
问:
我正在制作一款主机游戏。我希望能够同时检查 2 个人的信息。就我而言,我想发出“kill checker”命令。命令是
~killc [username]
使用此命令,我将能够检查 1 个人的杀戮。如果我想检查 2 个人怎么办?我将如何使用我的 .matches(regex) 来计算 2 个字符串?我试过打字:
"^~killc [^ ] [^ ]+$", and "^~killc [^ ] + [a-zA-Z]+$"
但它们不起作用。 有关详细信息,请阅读下面的代码。
import java.util.Scanner;
class StackOverflowExample {
static int kills = 10;
public static void main(String[] args) {
System.out.println("Kill count command: ~killc [username]");
Scanner userInt = new Scanner(System.in);
String userInput = userInt.nextLine();
if (userInput.matches("^~killc [^ ]+$"/**How would I input more than one username?**/)){
String[] parts = userInput.split(" ");
String username = parts[1];
System.out.printf("%s has " + kills + " kills.",username);
}
}
}
答:
0赞
Nick Reed
5/25/2021
#1
重复的小组怎么样?
^~killc(?: [^ ]+)+$
当输入命令时,这将捕获一个或多个用户名。实际上解析它们取决于您,但如果用户名格式正确,这将捕获它们。
就个人而言,我会非常小心,因为它会接受换行符作为匹配项;如果它可用,请尝试,这将匹配任何不是空格的内容。[^ ]+
\S+
1赞
The fourth bird
5/25/2021
#2
您可以将模式与捕获组一起使用,并在空间上拆分捕获组的值。
^~killc (\S+(?: \S+)*)$
^
字符串的开头~killc\h+
匹配和 1+ 个空格~killc
(
捕获组 1\S+(?:\h+\S+)*
匹配 1+ 个非 whitspace 字符,并选择性地重复 1+ 个空格和 1+ 个非 whitspace 字符
)
关闭组 1$
字符串末尾
System.out.println("Kill count command: ~killc [username]");
Scanner userInt = new Scanner(System.in);
String regex = "^~killc\\h+(\\S+(?:\\h+\\S+)*)$";
String userInput = userInt.nextLine();
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(userInput);
if (matcher.find()) {
for (String username : matcher.group(1).split(" "))
System.out.printf("%s has " + kills + " kills.\n",username);
}
如果输入是~killc test1 test2
输出将是
Kill count command: ~killc [username]
test1 has 10 kills.
test2 has 10 kills.
评论