2010-06-04 56 views
0

我有這樣的一個的論點下面我傳遞給PowerShell腳本中提取字符串

-arg1 -abc -def -arg2 -ghi -jkl -arg3 -123 -234 

現在我需要沒有任何空白

string 1: "-abc -def" 

string 2: "-ghi -jkl" 

string 3: "-123 -234" 

提取三個字符串之間的文本Powershell的正則表達式的幫助下,我認爲這個表達可以做到這一點。但這似乎並不奏效。

$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 

,也是第二個問題是如何使arg1arg2arg3可選?

腳本參數可以是

-arg2 -def -ghi. 

我會採取一些默認值未提及arg(1|2|3)

感謝

+0

如果你像'runScript.ps1 -arg1 -abc -def -arg2 -ghi -jkl -arg3 -123 -234'那樣運行腳本,這意味着你可以指定參數$ arg1,$ abc,$ def,$ arg2, ....你能顯示腳本的param(..)部分嗎? – stej 2010-06-04 06:25:01

+0

在腳本中,我使用$ args作爲參數調用外部exe文件。這個exe會被這些-arg1 -abc -def參數正確調用。現在問題是我需要調用三個不同的exe文件,每個文件都帶有參數-arg1,-arg2 .. etc – excray 2010-06-04 08:42:56

回答

0

好像堆棧溢出語法高亮已經敗壞它你:你雙擊使用「文字;對於命名組和整個字符串。

我不能嘗試因爲我沒有在這個盒子PS,但怎麼樣:

$args -match '-arg1(?<arg1>.*?) -arg2(?<arg2>.*?) -arg3(?<arg3>.*)' 

另外,我會用\s+替換空格,這樣參數之間的多個空格字符也是允許的。

+0

謝謝。當我這樣做時,沒有匹配返回。 echo $ matches [0]給出了一個錯誤,說「不能索引到一個空數組」 – excray 2010-06-04 06:47:55