【发布时间】:2018-11-08 11:46:08
【问题描述】:
我需要将字符串解析为键值对,其中的值可能是可选的。标准命令行解析器没有用,因为我检查的所有解析器都接受String[] 而不是String。因此,我求助于正则表达式,果然,面临以下问题:
有些人在遇到问题时会想“我知道,我会用 正则表达式。”现在他们有两个问题。
一、输入字符串:
"/opt/sensu/embedded/bin/ruby /opt/sensu/embedded/bin/check-graphite-stats.rb " +
"--crit 25 --host 99.99.999.9999:8082 --period -5mins --target 'alias(scale(divideSeries(" +
"summarize(sumSeries(nonNegativeDerivative(transformNull(exclude(" +
"\\\"unknown\\\"), 0))), \\\"30d\\\", \\\"sum\\\", false),summarize(" +
...gigantuous string
\\\"sum\\\", false)), 100), \\\"3pp error rate\\\")' " +
"--unknown-ignore --warn 5"
接下来,我的正则表达式:
(--(?<option>.+?)\s+(?<value>.+?(?=--))?)+?
上述几乎有效,但不完全。
输出:
--crit 25
--host 99.99.999.9999:8082
--period -5mins
--target 'gigantuous string'
--unknown-ignore
--warn
为什么--warn的值没有被拾取?
【问题讨论】:
-
为什么不将每个参数分别传递给
args[]? -
你的输入是一个shell命令。您是如何最终尝试用 Java 编写 shell 解析器的?
-
我只有字符串。
标签: java regex command-line command-line-arguments