【问题标题】:How do I check for multiple [args] in a regex with Java?如何使用 Java 检查正则表达式中的多个 [args]?
【发布时间】:2021-08-13 06:22:23
【问题描述】:

我正在制作一个主机游戏.. 我希望能够同时检查 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);
      
    }
    
  }
}

【问题讨论】:

  • 这个“不起作用”到底是怎么回事?您是否收到错误消息、意外输出或比“不起作用”更具体的内容?
  • @NickReed 没有任何反应。我播放代码,它就结束了。

标签: java regex console command java.util.scanner


【解决方案1】:

您可以将模式与捕获组一起使用,并将捕获组的值拆分为空格。

^~killc (\S+(?: \S+)*)$
  • ^ 字符串开始
  • ~killc\h+ 匹配 ~killc 和 1+ 个空格
  • ( 捕获第 1 组
    • \S+(?:\h+\S+)* 匹配 1+ 个非空白字符,并可选择重复 1+ 个空格和 1+ 个非空白字符
  • )关闭第一组
  • $ 字符串结束

Regex demo

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.

Java demo

【讨论】:

    【解决方案2】:

    重复组怎么样?

    ^~killc(?: [^ ]+)+$

    这将在输入命令时捕获一个或多个用户名。实际上解析它们取决于您,但如果用户名格式正确,这将捕获它们。 就个人而言,我会非常小心[^ ]+,因为它会接受换行符作为匹配项;如果可用,请尝试\S+,它将匹配任何非空格。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-07
      • 1970-01-01
      • 1970-01-01
      • 2018-03-07
      • 1970-01-01
      • 2011-07-23
      相关资源
      最近更新 更多