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>]

任意のバイナリ Split ステートメント (区切り記号または-cSplit-splitスクリプト ブロックを含む Split ステートメント) で置き換えることができます-iSplit。 演算子 -iSplit と演算子では、大文字と -split 小文字が区別されません。 演算子では -cSplit 大文字と小文字が区別されます。つまり、区切り記号ルールが適用されるときに大文字と小文字が区別されます。

パラメーター

<String> または <String[]>

分割する 1 つ以上の文字列を指定します。 複数の文字列を送信する場合、すべての文字列は同じ区切り記号ルールを使用して分割されます。

例:

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

<区切り記号>

部分文字列の末尾を識別する文字。 既定の区切り記号は空白で、スペースや印刷できない文字 (改行 ('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>

分割操作によって返される部分文字列の最大数を指定します。 既定値は、区切り記号で分割されたすべての部分文字列です。 さらに部分文字列がある場合は、最後の部分文字列に連結されます。 部分文字列が少ない場合は、すべての部分文字列が返されます。 値 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

負の値は無視されます。

<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 でのみ有効です。

Note

SingleLine は既定の動作です。 単一行と複数行を options パラメーターと共に使用することはできません。 これは PowerShell 6.0 で解決されました。 回避策は、正規表現で Mode-Modifiers を使用することです。 モード修飾子 の詳細については、「正規表現オプション」を参照してください。

単項および二項分割演算子

単項分割演算子 (-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

次のステートメントは、2 つの文字列を 3 つの部分文字列に分割します。 (制限は各文字列に個別に適用されます)。

"a,b,c,d", "e,f,g,h" -split ",", 3
a
b
c,d
e
f
g,h

次のステートメントは、最初の桁の here 文字列の各行を分割します。 複数行オプションを使用して、各行と文字列の先頭を認識します。

0 は、Max-substrings パラメーターの "return all" 値を表します。 複数行などのオプションは、最大部分文字列の値が指定されている場合にのみ使用できます。

$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

関連項目