about_split
トピック
about_Split
簡易説明
split 演算子を使用して、1 つまたは複数の文字列を部分文字列に分割する方法について説明します。
詳細説明
split 演算子は、1 つまたは複数の文字列を部分文字列に分割します。この分割操作に関して、次の要素を変更
できます。
-- 区切り記号。既定値は空白ですが、区切り記号を指定する文字、文字列、パターン、またはスクリプト ブ
ロックを指定できます。
-- 部分文字列の最大数。既定では、すべての部分文字列が返されます。部分文字列の数よりも小さい数値を指
定した場合、残りの部分文字列が最後の部分文字列に連結されます。
-- 区切り記号の一致条件を指定するオプション (SimpleMatch、Multiline など)。
構文
-split 演算子の構文を次に示します。
実際のコマンドにパラメーター名は指定しません。パラメーターの値のみ指定します。この構文に示されている
順序で値を指定する必要があります。
-Split <String>
<String> -Split <Delimiter>[,<Max-substrings>[,"<Options>"]]
<String> -Split {<ScriptBlock>} [,<Max-substrings>]
split ステートメントでは、-iSplit または -cSplit を -split の代わりに使用することができます。
-iSplit および -split 演算子では、大文字と小文字は区別されません。-cSplit 演算子では、区切り規則を
適用するときに大文字と小文字が区別されます。
パラメーター
<String>
分割の対象となる文字列を指定します。複数の文字列を指定することもできます。複数の文字列を
指定して実行した場合、すべての文字列が同じ区切り規則で分割されます。次に例を示します。
-split "red yellow blue green"
red
yellow
blue
green
<Delimiter>
部分文字列の終端を表す文字です。既定の区切り記号は空白です。空白とは、スペースのほか、改行 (`n)
やタブ (`t) など、印字されない文字も該当します。文字列を分割した場合、いずれの部分文字列にも区切
り記号は含まれません。次に例を示します。
"Lastname:FirstName:Address" -split ":"
Lastname
FirstName
Address
<Max-substrings>
取得する部分文字列の最大数を指定します。既定では、すべての部分文字列が区切り記号で分割されます。
指定した数より多くの部分文字列が存在した場合、残りの部分文字列が最後の部分文字列に連結されます。
部分文字列が、指定した数よりも少なかった場合は、すべての部分文字列が返されます。値に 0 または負の
値を指定すると、すべての部分文字列が返されます。
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
<Options>
オプション名は引用符で囲みます。オプションを使用できるのは、ステートメントに <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 <string>) には、コンマよりも高い優先度が与えられています。そのため、文
字列のコンマ区切り一覧を単項 split 演算子に渡した場合、最初の文字列 (1 つ目のコンマの前の文字列) だ
けが分割されます。
複数の文字列を分割対象にする場合は、二項の 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
次のステートメントは、文字列を 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) では、引用符で囲まれたドット (".") は、改行文字 (\n) 以外の任意の文字と解釈され
ます。そのため、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