(-[a-zA-Z]+=?)+(([^\s]+)|(\s+((["'])(?:(?=(\\?))\2.)*?\6)))
我有一堆命令行参数。
-arg1 -arg2 -arg3=500 -arg4=-250,200,50.0 -arg5 "Hello World" -arg6 "[I don't know whats going on /here/]"
我不是特别擅长正则表达式,而是使用regexr.com来验证我的结果。 Regex.Matches与此站点的表达式通常工作复制和粘贴没有问题。这次不是。
使用该命令行字符串的结果如下:
Count = 6
[0]: "-arg1"
[1]: "-arg2"
[2]: "-arg3=500"
[3]: "-arg4=-250,200,50.0"
[4]: "-arg5"
[5]: "-arg6"
这是循环Regex.Matches和每个Captures
我无法弄清楚为什么引号不会成为比赛的一部分。它可能是|(\s+((["']
部分的空白问题吗?
答案 0 :(得分:3)
<强> 更新 强>
I tweaked this per your comment.我将可选空格(\s*
)拉入一个空格或等号的非捕获组。您还会看到我在更改中首先移动了引号捕获,因为\S+
将开始匹配"foo
而我们不希望这样。
(-\w+)(?:=|\s)?("[^"]*"|\S+)?
我对此进行了一些清理,让我知道你写的原始表达是否缺少任何功能:
(-\w+)\s*((?:=\S+)|"[^"]*")?
有一些事情打破了你的原始表达,包括:
\2
或\6
引用时出现混淆\d
捕获参数键(-[a-zA-Z]+=?
)