正则表达式匹配命令行java应用程序执行与args

时间:2013-05-16 11:02:41

标签: java regex

我绝对不熟悉正则表达式,所以最好先问一些非常愚蠢的事情。我有一个从命令行执行的java应用程序,它有一个非常好的签名。

java applicationName -mode=create -some.nice.arg=XXX.XXX.XXX.XXX:XXXX -another.nice.arg=value2 -third.nice.arg=value3 -again.nice.arg=value4 ... -nth.nice.arg=value_n+1

这将是所需的格式。好吧至少足够接近。我正在尝试创建一个与此匹配的正则表达式,并将选择参数字段,如:

  • 模式=创建
  • some.nice.arg = XXX.XXX.XXX.XXX:XXXX
  • another.nice.arg =值2
  • third.nice.arg =值3
  • again.nice.arg = VALUE4
  • ...
  • nth.nice.arg = value_n + 1

例如,我创建一个IP地址的正则表达式没有问题,但我不能创建一个匹配这整个东西。到目前为止,我最好的选择是:

\w+[ ]{1}\w+[ ]{1}[-]{1}(\w+[=]{1}\w+){+}

很多问题。例如\ w +将不匹配'。'但是他们肯定会在那里。或者换个例子:  mode可以具有以下选项之一:

  • 创建
  • 更新
  • 明确

我甚至在第一个问题上有点开枪,更不用说第二个了。

感谢您的帮助!   - 乔伊

3 个答案:

答案 0 :(得分:2)

解决此问题的正确方法是使用命令行界面库,例如Commons CLI。使用这些库,您可以定义应用程序的参数,库将根据此验证输入(即您的String[] args)。

大多数CLI库可以处理高级概念,例如可选参数,标志,多部分参数等。它们还可用于为用户打印有用的用法消息。查看一些examples here

一旦你使用这样的库来收集参数,你就可以使用regexp(如果需要的话)分别验证每个部分。

答案 1 :(得分:1)

如果你真的想为此创建正则表达式,请注意提示:

mode=(\\w+)\\s+some.nice.arg=((?:\\w{3}\\.){3}\\w{3}:\\w{4})\\s+another.nice.arg=(\\S+?)\\s+third.nice.arg=(\\S+?)\\s+again.nice.arg=(\\S+?)

等等。

然而,更好的方法是将行分割成段然后处理每个段:

String line = ....;
String[] segments = line.split("\\s+");

for (String segment : segments) {
    String[] parts = segment.split("=");
    String name = parts[0];
    String value = name[1];
    // deal with names and values
}

答案 2 :(得分:0)

这可能符合您捕获参数的需求:

-([a-zA-Z.-]+)=((?:"[^"]+"|[^ ])+)

Demo