about_Split
適用対象: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0, Windows PowerShell 5.0
トピック
about_Split
概要
Split 演算子を使用して、1 つ以上の文字列を部分文字列に分割する方法について説明します。
詳細説明
Split 演算子は、1 つ以上の文字列を部分文字列に分割します。分割操作では、次の要素を変更できます。
-- 区切り記号。既定値は空白ですが、文字、文字列、パターン、またはスクリプト ブロックを区切り記号として指定できます。Windows PowerShell® の Split 演算子では、区切り記号に単純な文字ではなく正規表現が使用されます。
-- 部分文字列の最大数。既定では、部分文字列がすべて返されます。部分文字列の数よりも小さい数を指定すると、残りの部分文字列がすべて最後の部分文字列として連結されます。
-- 区切り記号に照合する条件を指定するオプションです。例: SimpleMatch、Multiline。
構文
次の図は、-split 演算子の構文を示しています。
コマンドではパラメーター名は指定しません。パラメーターの値のみを指定します。この構文図に示されている順序で値を指定する必要があります。
-Split <String>
<String> -Split <Delimiter>[,<Max-substrings>[,"<Options>"]]
<String> -Split {<ScriptBlock>} [,<Max-substrings>]
二項 Split ステートメント (区切り記号またはスクリプト ブロックが含まれた Split ステートメント) では、-split の代わりに -iSplit または -cSplit を使用できます。-iSplit 演算子と-split 演算子では、大文字と小文字は区別されません。-cSplit 演算子では大文字と小文字が区別され、区切り記号の規則を適用する際に大文字と小文字の違いが考慮されます。
パラメーター
<String>
分割する 1 つ以上の文字列を指定します。複数の文字列を渡した場合、すべての文字列が同じ区切り記号規則を使用して分割されます。例:-split "red yellow blue green" red yellow blue green
<Delimiter>
部分文字列の終端を示す文字です。既定の区切り記号は空白です。空白にはスペースのほか、改行 (`n) やタブ (`t) など印刷されない文字も含まれます。文字列が分割されると、すべての部分文字列から区切り記号が削除されます。例:"Lastname:FirstName:Address" -split ":" Lastname FirstName Address
既定では、区切り記号は結果から削除されます。区切り記号の全部または一部を残すには、残したい部分をかっこで囲みます。<Max-substrings> パラメーターが追加されている場合、コマンドによって文字列が分割される際に、このパラメーターが優先されます。ただし、出力に区切り記号を含める処理をすると、コマンドを実行したときに区切り記号が出力の一部として返されますが、出力に区切り記号を含めるための文字列の分割は、この分割回数にはカウントされません。例:
"Lastname:FirstName:Address" -split "(:)" Lastname : FirstName : Address "Lastname/:/FirstName/:/Address" -split "/(:)/" Lastname : FirstName : Address
次の例では、<Max-substrings> が 3 に設定されています。これを実行すると文字列の値が 3 つに分割されますが、出力内の文字列は全部で 5 つになります。部分文字列の最大値に到達するまで、分割の後に区切り記号が追加されます。最後の部分文字列に追加される区切り記号は、部分文字列の一部として含められます。
'Chocolate-Vanilla-Strawberry-Blueberry' -split '(-)', 3; Chocolate - Vanilla - Strawberry-Blueberry
<Max-substrings>
文字列を分割する回数の最大値を指定します。既定では、部分文字列が区切り記号ですべて分割されます。指定された値より多くの部分文字列が存在する場合は、残りの部分文字列がすべて最後の部分文字列として連結されます。指定された値よりも部分文字列が少ない場合は、すべての部分文字列が返されます。値に 0 または負の値が指定された場合は、すべての部分文字列が返されます。Max-substrings は、返されるオブジェクトの最大数を指定するものではありません。値は、文字列を分割する最大回数に相当します。Split 演算子に複数の文字列 (文字列の配列) を渡した場合、Max-substrings の上限はそれぞれの文字列に個別に適用されます。例:
$c = "Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune" $c -split ",", 5 Mercury Venus Earth Mars Jupiter,Saturn,Uranus,Neptune
<ScriptBlock>
区切り記号を適用する規則を指定する式です。$true または $false を評価する式である必要があります。スクリプト ブロックは中かっこで囲みます。例:$c = "Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune" $c -split {$_ -eq "e" -or $_ -eq "p"} M rcury,V nus,Earth,Mars,Ju it r,Saturn,Uranus,N tun
<オプション>
オプション名は引用符で囲みます。オプションが有効になるのは、ステートメントに <Max-substrings> パラメーターが使用されている場合のみです。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 演算子 (-split <string>) はコンマよりも優先順位が高くなっています。そのため、文字列のコンマ区切りの一覧を単項 Split 演算子に渡すと、最初の文字列 (最初のコンマの前) のみが分割されます。
複数の文字列を分割する場合は、二項 Split 演算子 (<string> -split <delimiter>) を使用します。すべての文字列をかっこで囲むか、文字列を変数に格納して 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" の位置で分割しますが、分割後の部分文字列数が 6 つに制限されます。
C:\PS> "Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune" -split '[er]', 6
M
cu
y,V
nus,
arth,Mars,Jupiter,Saturn,Uranus,Neptune
次のステートメントは、1 つの文字列を 3 つの部分文字列に分割します。
C:\PS> "a,b,c,d,e,f,g,h" -split ",", 3
a
b
c,d,e,f,g,h
次のステートメントは、2 つの文字列を 3 つの部分文字列に分割します (上限は各文字列に個別に適用されます)。
C:\PS> "a,b,c,d", "e,f,g,h" -split ",", 3
a
b
c,d
e
f
g,h
次のステートメントは、here-string 内の各行を最初の数字の位置で分割します。Multiline オプションが使用されているため、各行と各文字列の先頭が認識されます。
0 は "すべてを返す" を表す Max-substrings パラメーターの値です。Multiline などのオプションは、Max-substrings の値を指定した場合にのみ使用できます。
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 は "すべてを返す" を表す Max-substrings パラメーターの値です。SimpleMatch などのオプションは、Max-substrings の値を指定した場合にのみ使用できます。
C:\PS> "This.is.a.test" -split ".", 0, "simplematch"
This
is
a
test
次のステートメントは、変数の値に応じて、2 つの区切り記号のいずれかの位置で文字列を分割します。
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