about_Split
簡単な説明
Split 演算子を使用して、1 つ以上の文字列を部分文字列に分割する方法について説明します。
長い説明
Split 演算子は、1 つ以上の文字列を部分文字列に分割します。 分割操作の次の要素を変更できます。
- 区切り 記号。 既定値は空白ですが、区切り記号を指定する文字、文字列、パターン、またはスクリプト ブロックを指定できます。 PowerShell の Split 演算子は、単純な文字ではなく、区切り記号に正規表現を使用します。
- 部分文字列の最大数。 既定では、すべての部分文字列が返されます。 部分文字列の数より小さい数値を指定すると、残りの部分文字列が最後の部分文字列に連結されます。
- SimpleMatch や Multiline など、区切り記号が一致する条件を指定するオプション。
構文
次の図は、-split 演算子の構文を示しています。
パラメーター名は コマンドに表示されません。 パラメーター値のみを含めます。 値は、構文図で指定された順序で指定する必要があります。
-Split <String>
-Split (<String[]>)
<String> -Split <Delimiter>[,<Max-substrings>[,"<Options>"]]
<String> -Split {<ScriptBlock>} [,<Max-substrings>]
または -cSplit
は-split
、任意のバイナリ Split ステートメント (区切り記号またはスクリプト ブロックを含む Split ステートメント) で置き換えることができます-iSplit
。 -iSplit
演算子と 演算子では、大文字と-split
小文字は区別されません。 演算子では -cSplit
大文字と小文字が区別されます。つまり、区切り記号ルールが適用されるときに大文字と小文字が区別されます。
パラメーター
<String> または <String[]>
分割する 1 つ以上の文字列を指定します。 複数の文字列を送信する場合、すべての文字列は同じ区切り記号規則を使用して分割されます。
例:
-split "red yellow blue green"
red
yellow
blue
green
<区切り 記号>
部分文字列の末尾を識別する文字。 既定の区切り記号は空白文字で、改行 ('n) や tab ('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>
分割操作によって返される部分文字列の最大数を指定します。 既定値は、区切り記号で分割されたすべての部分文字列です。 さらにサブ文字列がある場合は、最後の部分文字列に連結されます。 部分文字列が少ない場合は、すべての部分文字列が返されます。 値 0 は、すべての部分文字列を返します。
例:
$c = "Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune"
$c -split ",", 5
Mercury
Venus
Earth
Mars
Jupiter,Saturn,Uranus,Neptune
演算子に複数の文字列 (文字列の配列) を -split
送信する場合、 Max-substrings
制限は各文字列に個別に適用されます。
$c = 'a,b,c','1,2,3,4,5'
$c -split ',', 3
a
b
c
1
2
3,4,5
<Max-substrings>
は、返されるオブジェクトの最大数を指定しません。 次の例では、 <Max-substrings>
は 3 に設定されています。
これにより、3 つの部分文字列値が生成されますが、結果の出力には合計 5 つの文字列が含まれます。 区切り記号は、最大 3 つの部分文字列に達するまで分割の後に含まれます。 最後の部分文字列の追加の区切り記号は、部分文字列の一部になります。
'Chocolate-Vanilla-Strawberry-Blueberry' -split '(-)', 3
Chocolate
-
Vanilla
-
Strawberry-Blueberry
負の値は、入力文字列の末尾から要求された部分文字列の量を返します。
注意
PowerShell 7 で負の値のサポートが追加されました。
$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,
arth,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 でのみ有効です。
- 複数行: 複数行モード
^
では、入力文字列の先頭と$
末尾ではなく、すべての行の先頭の末尾と一致するように強制されます。 - 単一行: 単一行モードでは、入力文字列が SingleLine として扱われます。
改行を
.
除くすべての文字と一致するのではなく、すべての文字 (改行を含む) と一致するように文字を\n
強制します。 - ExplicitCapture: 結果一覧で明示的なキャプチャ グループのみが返されるように、名前のない一致グループを無視します。 RegexMatch でのみ有効です。
単項および二項分割演算子
単項分割演算子 (-split <string>
) は、コンマよりも優先順位が高くなります。 その結果、文字列のコンマ区切りのリストを単項分割演算子に送信すると、最初の文字列 (最初のコンマの前) のみが分割されます。
複数の文字列を分割するには、次のいずれかのパターンを使用します。
- 二項分割演算子 (<string[] -split <区切り記号>) を>使用する
- すべての文字列をかっこで囲む
- 変数に文字列を格納し、変数を分割演算子に送信します
次の例を確認してください。
PS> -split "1 2", "a b"
1
2
a b
PS> "1 2", "a b" -split " "
1
2
a
b
PS> -split ("1 2", "a b")
1
2
a
b
PS> $a = "1 2", "a b"
PS> -split $a
1
2
a
b
例
次のステートメントは、文字列を空白で分割します。
-split "Windows PowerShell 2.0`nWindows PowerShell with remoting"
Windows
PowerShell
2.0
Windows
PowerShell
with
remoting
次のステートメントは、任意のコンマで文字列を分割します。
"Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune" -split ','
Mercury
Venus
Earth
Mars
Jupiter
Saturn
Uranus
Neptune
次のステートメントは、パターン "er" で文字列を分割します。
"Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune" -split 'er'
M
cury,Venus,Earth,Mars,Jupit
,Saturn,Uranus,Neptune
次のステートメントは、文字 "N" で大文字と小文字を区別する分割を実行します。
"Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune" -cSplit 'N'
Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,
eptune
次のステートメントは、文字列を "e" と "t" で分割します。
"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 つの部分文字列に制限します。
"Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune" -split '[er]', 6
M
cu
y,V
nus,
arth,Mars,Jupiter,Saturn,Uranus,Neptune
次のステートメントは、文字列を 3 つの部分文字列に分割します。
"a,b,c,d,e,f,g,h" -split ",", 3
a
b
c,d,e,f,g,h
次のステートメントは、文字列を文字列の末尾から始まる 3 つの部分文字列に分割します。
"a,b,c,d,e,f,g,h" -split ",", -3
a,b,c,d,e,f
g
h
次のステートメントは、2 つの文字列を 3 つの部分文字列に分割します。 (制限は各文字列に個別に適用されます)。
"a,b,c,d", "e,f,g,h" -split ",", 3
a
b
c,d
e
f
g,h
次のステートメントは、here-string の各行を最初の数字で分割します。 複数行オプションを使用して、各行と文字列の先頭を認識します。
0 は、Max-substrings パラメーターの "return all" 値を表します。 [複数行] などのオプションは、Max-substrings 値が指定されている場合にのみ使用できます。
$a = @'
1The first line.
2The second line.
3The third of three lines.
'@
$a -split "^\d", 0, "multiline"
The first line.
The second line.
The third of three lines.
次のステートメントでは、円記号を使用してドット (.) 区切り記号をエスケープします。
既定の RegexMatch では、引用符 (".") で囲まれたドットは、改行文字を除く任意の文字と一致するように解釈されます。 その結果、Split ステートメントは改行を除くすべての文字に対して空白行を返します。
"This.is.a.test" -split "\."
This
is
a
test
次のステートメントでは、SimpleMatch オプションを使用して、ドット (.) 区切り記号をリテラルで解釈するように -split 演算子を指示します。
0 は、Max-substrings パラメーターの "return all" 値を表します。 SimpleMatch などのオプションは、Max-substrings 値が指定されている場合にのみ使用できます。
"This.is.a.test" -split ".", 0, "simplematch"
This
is
a
test
次のステートメントでは、変数の値に応じて、文字列を 2 つの区切り記号のいずれかで分割します。
$i = 1
$c = "LastName, FirstName; Address, City, State, Zip"
$c -split $(if ($i -lt 1) {","} else {";"})
LastName, FirstName
Address, City, State, Zip