Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于提取命令行参数的正则表达式-Java_Java_Regex_String_Input_Command Line Arguments - Fatal编程技术网

用于提取命令行参数的正则表达式-Java

用于提取命令行参数的正则表达式-Java,java,regex,string,input,command-line-arguments,Java,Regex,String,Input,Command Line Arguments,我知道外面有很多。。但我不知道如何从Scanner(System.in)中提取两个参数 允许两个参数: 第一个可以是AHG中的一个或4到9之间的数字。 第二个参数再次介于4到9或任意数字之间。 它应该处理所有场景: " A 3 " //spaces before and after "A 3" // spaces between the params "A 7 6" // Unwanted 3rd parameter

我知道外面有很多。。但我不知道如何从
Scanner(System.in)中提取两个参数

允许两个参数:

第一个可以是
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.
那么,如何为此编写正则表达式来提取上述内容呢?
我试过这个<代码>\\w\\s
。但这并不奏效。我对正则表达式不太熟悉。

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

\\s+
表示至少一个空格字符作为分隔符

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

首先检查两个参数的格式

  • 参数[0]。匹配(\\s*[AHG4-9])
  • 参数[1]。匹配(\\d”)

  • readLine()
    返回的字符串使用此选项:

    \\s+
    表示至少一个空格字符作为分隔符

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

    首先检查两个参数的格式

  • 参数[0]。匹配(\\s*[AHG4-9])
  • 参数[1]。匹配(\\d”)
  • 尝试:

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

    尝试:


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

    我认为您试图用一个语句完成太多的任务。这使您的代码很难理解。我不确定您所说的困难是什么意思,但您不仅尝试解析参数,而且还尝试按照操作规则进行验证。对于大多数不经常使用复杂正则表达式的程序员来说,您使用的正则表达式可能很难理解。因此,我宁愿先拆分输入,然后在第二步验证参数。啊,不理解正则表达式是完全不同的情况:P@FrankPuffer如何使用
    空格;字符类;空白;可选数字
    复杂?我认为您试图用一条语句完成太多的任务。这使您的代码很难理解。我不确定您所说的困难是什么意思,但您不仅尝试解析参数,而且还尝试按照操作规则进行验证。对于大多数不经常使用复杂正则表达式的程序员来说,您使用的正则表达式可能很难理解。因此,我宁愿先拆分输入,然后在第二步验证参数。啊,不理解正则表达式是完全不同的情况:P@FrankPuffer如何使用
    空格;字符类;空白;可选数字
    complex?如何忽略空格而只提取参数?@KevinRave:这就是
    commandLine.split(\\s+)应该这样做。我如何忽略空白而只提取参数?@KevinRave:这就是
    commandLine.split(\\s+)应该可以。
    
       "      A    3  " //spaces before and after
       "A    3"         // spaces between the params
       "A    7     6"   // Unwanted 3rd parameter
       "  6  "          // Only one param with spaces.
    
    String [] arguments = commandLine.split( "\\s+" );
    
    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]