用于提取命令行参数的正则表达式-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之间的数字。第二个参数可以是任意数字,也可以是可选的我认为您试图用一个语句完成太多的任务。这使您的代码很难理解。我不确定您所说的困难是什么意思,但您不仅尝试解析参数,而且还尝试按照操作规则进行验证。对于大多数不经常使用复杂正则表达式的程序员来说,您使用的正则表达式可能很难理解。因此,我宁愿先拆分输入,然后在第二步验证参数。啊,不理解正则表达式是完全不同的情况: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]