用于提取命令行参数的 RegEx - Java

RegEx to extract command line arguments - Java

我知道那里有很多..但我不知道如何从 Scanner(System.in);

中提取两个参数
commandline = scanner.readLine();

允许两个参数:

第一个可以是AHG之一或4到9之间的数字。 第二个参数又是 4 到 9 之间的任何数字。 它应该处理所有场景:

   "      A    3  " //spaces before and after
   "A    3"         // spaces between the params
   "A    7     6"   // Unwanted 3rd parameter
   "  6  "          // Only one param with spaces.

那么如何编写Regex来提取上面的内容呢? 我试过这个。 \w\s。但这没有用。我不擅长 RegEx。

readLine() 返回的字符串上使用它:

String [] arguments = commandLine.split( "\s+" );

\s+代表至少一个空白字符作为分隔符。

然后检查数组有多少个元素。

最后检查两个参数的格式

  1. arguments[0].matches("\s*[AHG4-9]");
  2. arguments[1].matches("\d");

尝试:

public static ArrayList<String> parseArguments(String argument){
    Pattern regex = Pattern.compile("^\s*([AHG4-9])\s*(\d)?\s*$",
            Pattern.CASE_INSENSITIVE | Pattern.MULTILINE);

    Matcher regexMatcher = regex.matcher(argument);

    if (regexMatcher.find()) {

        ArrayList<String> arguments = new ArrayList<String>();

        arguments.add(regexMatcher.group(1));

        if(regexMatcher.group(2) != null)
        {
            arguments.add(regexMatcher.group(2));
        }

        return arguments;
    }

    return null;

}

根据您的输入:

它将打印:

[A,3]

以上正则表达式也强制执行参数规则。例如,正如您提到的,第一个参数可以是 A、H、G 或 4 到 9 之间的数字。第二个参数是任意数字,可以是可选的