我有一个像下面那个我传递给powershell脚本的论点
-arg1 -abc -def -arg2 -ghi -jkl -arg3 -123 -234
现在我需要提取三个没有任何空格的字符串
string 1: "-abc -def"
string 2: "-ghi -jkl"
string 3: "-123 -234"
我认为这个表达式可以做到。但这似乎不起作用。
$args -match '-arg1(?'arg1'.*?) -arg3(?'arg3'.*?) -arg3(?'arg3'.*)'.
这应该返回$ matches ['arg1']等。所以上面的表达式有什么不对。为什么我会收到如下所示的错误
runScript.ps1 -arg1 -abc -def -arg2 -ghi -jkl -arg3 -123 -234
Unexpected token 'arg1'.*?) -arg2
(?'arg2'.*?) -arg3 (?'arg3'.*)'' in
expression or statement. At
G:\powershell\tools\powershell\runTest.ps1:1
char:71
+ $args -match '-arg1 (?'arg1'.*?) -arg2 (?'arg2'.*?) -arg3 (?'arg3'.*)' <<<<
+ CategoryInfo : ParserError: (arg1'.*?) -arg2...g3
(?'arg3'.*)':String) [],
ParseException
+ FullyQualifiedErrorId : UnexpectedToken
还有第二个问题是我如何选择arg1
或arg2
或arg3
?
脚本的参数可以是
-arg2 -def -ghi.
我会为arg(1|2|3)
取一些未提及的默认值。
由于
答案 0 :(得分:0)
似乎堆栈溢出语法荧光笔已经为你破坏了它:你是双重使用'字符;对于命名组和整个字符串。
我无法尝试,因为我在这个盒子上没有PS,但是怎么样:
$args -match '-arg1(?<arg1>.*?) -arg2(?<arg2>.*?) -arg3(?<arg3>.*)'
另外,我会用\s+
替换空格,这样也允许参数之间有多个空白字符。