如何将java cmd参数与正则表达式匹配?

时间:2012-07-30 09:58:39

标签: java regex arguments cmd expression

我有像这样的cmd:

java Test -p 127.0.0.1:8080 -d D:\Desktop\temp.exe -o mingw -s 1024 -t 2000

我想通过-p-d-s(排除-p-d-s本身)来获取args,以及丢弃其他args。

我尝试了几个小时但没有结果,有没有人可以帮助我?

我尝试了arg [i]和arg [i + 1]方式,但是如果这样的args:-p -d xxx,用户不输入-p值,此解决方案将不起作用并导致问题。

6 个答案:

答案 0 :(得分:2)

使用此正则表达式-(\w) ([\w!@#$%^&*():\\/.]+) group[1]包含标志,group[2]包含参数

答案 1 :(得分:2)

如果您的所有选项都采用-x value格式,那么您可以将{args}数组拆分为-d 127.0.0.1:8080-d D:...

for(int i=0; i < args.length; i+=2){
    //group args
}

for each group in groups:
    if group[0].equals("-d"){
          //do something
    }
}

或者,只需看看Java中现有的OptionParser库。 How to parse command line arguments in Java?

答案 2 :(得分:1)

怎么样......

for(int i = 0; i < args.length; i+=2) { 
 if(args[i].equals("-p") {
   //args[i+1] is the value
 } 
 ... 
}

它不使用正则表达式,但是:)

答案 3 :(得分:1)

此解决方案将您的args组装到地图中:

public static void main(String[] args) {
  final Map<Character, String> am = new HashMap<Character, String>();
  for (int i = 0; i+1 < args.length; i++)
    if (args[i].matches("-[pds]") && !args[i+1].startsWith("-"))
      am.put(args[i].charAt(1), args[++i]);
  System.out.println(am);
}

答案 4 :(得分:0)

尽量不要创建一个大表达式,而是创建各种小表达式。例如,匹配-p部分的表达式为:-p ?(.*?)(未经测试)。

答案 5 :(得分:0)

你不需要正则表达式,因为参数来自一个数组,所以你只需循环它:

public static void main(String[] args) {
  Map<String, String> argsMap = new HashMap<String, String>();
  int i = 0;
  while(i < args.length - 1 && args[i].startsWith("-")) {
    argsMap.put(args[i].substring(1), args[++i]);
  }

  System.out.println("-p arg was " + argsMap.get("p"));
  // etc.
}