主題
    about_Split

簡短描述
    說明如何使用 split 運算子將一個或多個字串分割為子字串。

完整描述
    split 運算子會將一個或多個字串分割為子字串。您可以變更下列分割操作的元素:
	
	-- 分隔字元: 預設為空白字元,但是您可以指定字元、字串、模式或指令碼區
           塊來指定分隔字元。
	
	-- 子字串數目的上限: 預設為傳回所有子字串。如果您指定的數目少於子字串
           的數目,則其餘子字串會串連於最後一個子字串。

	-- 指定分隔字元須符合之條件的選項,例如 SimpleMatch 和 Multiline。


  語法

   下表顯示 -split 運算子的語法。

   參數名稱不會出現在命令中,只包含參數值。值必須依照語法圖表中指定的順序出現。

	-Split <字串>

	<字串> -Split <分隔字元>[,<子字串數目上限>[,"<選項>"]]

	<字串> -Split {<指令碼區塊>} [,<子字串數目上限>]

   您可以在任何 split 陳述式中以 -iSplit 或 -cSplit 取代 -split。
   -iSplit 和 -split 運算子不區分大小寫。-cSplit 運算子區分大小寫,也就是說,
    套用分隔字元規則時應考慮大小寫。


  參數

   <字串>
        指定一個或多個要分割的字串。如果您提交多個字串,則會使用相同的分隔字元
        規則分割所有字串。
        範例:

	    -split "red yellow blue green"
	    red
            yellow
	    blue
	    green

   <分隔字元>
        識別子字串結尾的字元。預設分隔字元是空白字元,包括空格和無法列印的字
        元,例如新行 (`n) 和 Tab (`t)。當分割字串時,會省略所有子字串中的分隔
        字元。範例:

	    "Lastname:FirstName:Address" -split ":"
	    Lastname
	    FirstName
	    Address
	
    <子字串數目上限>
        指定傳回的子字串數目上限。預設為分隔字元分割的所有子字串。如果有較多的
        子字串,則會串連於最後一個子字串。如果子字串較少,則會傳回所有子字串。
        0 值和負值會傳回所有子字串。

        如果您提交多個字串 (字串陣列) 至 split 運算子,則會分別對每一個字串套用
        子字串數目上限。範例:

	    $c = "Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune" $c 
	    -split ",", 5
	    Mercury
	    Venus
	    Earth
	    Mars
	    Jupiter,Saturn,Uranus,Neptune
	

    <指令碼區塊>
        指定套用分隔字元之規則的運算式。運算式必須評估為 $true 或 $false。請以
        大括號括住指令碼區塊。範例:
	
            $c = "Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptu
            ne" $c -split {$_ -eq "e" -or $_ -eq "p"}
	    M
	    rcury,V
	    nus,Earth,Mars,Ju
	    it
	    r,Saturn,Uranus,N
	
	    tun

    <選項>
        請以引號括住選項名稱。只有當在陳述式中使用 <Max-substrings> 參數時,
        Options 參數才有效。

        Options 參數的語法為:

	    "SimpleMatch [,IgnoreCase]"

            "[RegexMatch] [,IgnoreCase] [,CultureInvariant] 
            [,IgnorePatternWhitespace] [,ExplicitCapture] 
            [,Singleline | ,Multiline]"

 
        SimpleMatch 選項為:
         	
          -- SimpleMatch:評估分隔字元時,請使用簡單字串比較。無法搭配 
             RegexMatch 使用。

          -- IgnoreCase:即使指定 -cSplit 運算子,仍強制不區分大小寫比對。


        RegexMatch 選項為:

          -- RegexMatch:使用規則運算式比對評估分隔字元。這是預設行為。無法搭
             配 SimpleMatch 使用。

          -- IgnoreCase:即使指定 -cSplit 運算子,仍強制不區分大小寫比對。

          -- CultureInvariant:評估分隔字元時,忽略語言中的文化特性差異。僅適
             用於 RegexMatch。

          -- IgnorePatternWhitespace:忽略以數字符號 (#) 標示的未逸出空白字元
             和註解。僅適用於 RegexMatch。

          -- Multiline:Multiline 模式會辨識行和字串的開頭和結尾。僅適用於 
             RegexMatch。預設為 Singleline。

          -- Singleline:Singleline 模式僅辨識字串的開頭和結尾。僅適用於 
             RegexMatch。預設為 Singleline。

          -- ExplicitCapture:忽略非具名的比對群組,使結果清單中只會傳回明確
             的擷取群組。僅適用於 RegexMatch。
	

  一元和二元分割運算子

    一元分割運算子 (-split <字串>) 的優先順序高於逗號。因此,如果您提交逗號分
    隔的字串清單給一元分割運算子,則只會分割第一個字串 (位於第一個逗號前)。
    
    若要分割多個字串,請使用二元分割運算子 (<字串> -split <分隔字元>)。請以括
    號括住所有字串,或是將字串儲存在變數中,然後將變數提交給分割運算子。
    
    請看以下範例:

	-split "1 2", "a b"
	1
	2
 	a b


	"1 2", "a b" -split " "
	1
	2
 	a
	b


	-split ("1 2", "a b")
	1
	2
 	a
	b

	$a = "1 2", "a b"
	-split $a
	1
	2
 	a
	b

    
  範例

    下列陳述式會在空白字元處分割字串。

	C:\PS> -split "Windows PowerShell 2.0`nWindows PowerShell with remoting"

	Windows
	PowerShell
	2.0
	Windows
	PowerShell
	with
	remoting


    下列陳述式會在任何逗號處分割字串。

	C:\PS> "Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune" -split ','

        Mercury
        Venus
        Earth 
        Mars
        Jupiter
        Saturn
        Uranus
        Neptune


    下列陳述式會在 "er" 模式處分割字串。

	C:\PS>"Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune" -split 'er'

	M
	cury,Venus,Earth,Mars,Jupit
	,Saturn,Uranus,Neptune



    下列陳述式會在字母 "N" 處執行區分大小寫的分割。

	C:\PS> "Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune" 
	-cSplit 'N'

	Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus, eptune



    下列陳述式會在 "e" 和 "t" 處分割字串。

        C:\PS> "Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune" -split '[et]'

        M
        rcury,V
        nus,
        ar
        h,Mars,Jupi

        r,Sa
        urn,Uranus,N
        p
        un


    下列陳述式會在 "e" 和 "r" 處分割字串,但是限制傳回六個結果子字串。

        C:\PS> "Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune" -split '[er]', 6

	M

	cu
	y,V
	nus,
	arth,Mars,Jupiter,Saturn,Uranus,Neptune



    下列陳述式會將字串分割成三個子字串。
        C:\PS> "a,b,c,d,e,f,g,h" -split ",", 3

	a
	b
	c,d,e,f,g,h


    下列陳述式會將兩個字串分割成三個子字串  (此限制會單獨套用至每一個字串)。
        C:\PS> "a,b,c,d", "e,f,g,h" -split ",", 3

	a
	b
	c,d
	e
	f
	g,h


    下列陳述式會在 here-string 字串中的第一個數字處分割每一行。此陳述式使用
    Multiline 選項辨識每一行和每一個字串的開頭。

    0 代表「子字串數目上限」參數的「全部傳回」值。您只能在指定子字串數目上限值
    時使用選項,例如 Multiline。
    
        C:\PS> $a = @'
	1The first line.
	2The second line.
	3The third of three lines.
	'@
        
        C:\PS> $a -split "^\d", 0, "multiline"
	
	The first line.


	The second line.


	The third of three lines.



    下列陳述式使用 SimpleMatch 選項指示 -split 運算子逐字解譯句號 (.)  分隔字元。

    使用預設值 RegexMatch 時,以引號括住的句號 (".") 會解譯為符合新行字元以外
    的任何字元。因此,split 陳述式會針對新行以外的每一個字元傳回一個空白行。

    0 代表「子字串數目上限」參數的「全部傳回」值。您只能在指定子字串數目上限值
    時使用選項,例如 SimpleMatch。

        C:\PS> "This.is.a.test" -split ".", 0, "simplematch"

	This
        is
        a 
	test	



    下列陳述式會根據變數的值,在兩個分隔字元的其中一處分割字串。

        C:\PS> 	$i = 1
        C:\PS> 	$c = "LastName, FirstName; Address, City, State, Zip"
        C:\PS> 	$c -split {if ($i -lt 1) {$_ -eq ","} else {$_ -eq ";"}}

	LastName, FirstName
	 Address, City, State, Zip
		
	

    下列 split 陳述式會先在角括弧處分割 XML 檔,再於分號處分割。結果為可讀版本
    的 XML 檔。

        C:\PS> 	get-process powershell | export-clixml ps.xml
        C:\PS> 	$x = import-clixml ps.xml
        C:\PS> 	$x = $x -split "<"
        C:\PS> 	$x = $x -split ";"


    若要顯示結果,請輸入 "$x"。
	
	C:\PS> $x

        @{__NounName=Process
	Name=powershell
	Handles=428
	VM=150081536
	WS=34840576
	PM=36253696
	...


請參閱
    Split-Path
    about_Operators
    about_Comparison_Operators
    about_Join




目錄