PowerShell: 文字列演算子

PowerShellで使用する文字列演算子には 「+ += * -lile -notlike -match -notmatch -replace」があります。
文字列演算子は文字列の演算で使用する演算子です。 例えば「+」は文字列を連結し「"a" + "b"」は「"ab"」となります。

「-like -notlike -match -notmatch -replace」はPowerShellの公式ページでは 比較演算子として分類されていますが、 専ら文字列を扱う際に使用される演算子なので、 ここでは文字列演算子として分類しています。 以下でいくつかのグループに分けて文字列演算子を紹介します。

「+ += * *=」

まずは「+ += * *=」です。 この4つは算術演算子として使われるケースが多いですが、 文字列演算子としても使用できます。各演算子の意味は次の通りです。

演算子説明
+文字列を連結
+=連結して代入
*文字列を繰り返す
*=繰り返して代入

以下は具体的な使用例です。

# +
Write-Host ("a" + "b") # ab

# +=
$s = "a"
$s += "b"
Write-Host $s          # ab

# *
Write-Host ("a" * 3)   # aaa

# *=
$a = "a"
$a *= 3
Write-Host ($a)         # aaa

「+」演算子の少し紛らわしい点について説明します。 「文字列 + 文字列」は文字列連結となり、 「数値 + 数値」は数値演算となるのは当然ですが、 「文字列 + 数値」は文字列連結、 「数値 + 文字列」は数値演算となるので少し注意が必要です。

Write-Host (1 + 2)     # 3  数値演算
Write-Host ("1" + "2") # 12 文字列連結
Write-Host ("1" + 2)   # 12 文字列連結
Write-Host (1 + "2")   # 3  数値演算

「-like -notlike -match -notmatch」

次は「-like -notlike -match -notmatch」です。 「like」はワイルドカード(*)による比較で、 「match」は正規表現による比較になります。 各演算子の意味は次の通りです。

演算子説明
-likeワイルドカード比較で一致する場合True
-notlikeワイルドカード比較で一致しない場合True
-match正規表現比較で一致する場合True
-notmatch正規表現比較で一致しない場合True

以下は具体的な使用例です。 各演算子でTrueとなる場合とFalseとなる場合を記述しています。

Write-Host ("abcde" -like "abc*")     # True
Write-Host ("abcde" -like "*abc")     # False

Write-Host ("abcde" -notlike "abc*")  # False
Write-Host ("abcde" -notlike "*abc")  # True

Write-Host ("abcde" -match "a.c")     # True
Write-Host ("abcde" -match "a.bc")    # False

Write-Host ("abcde" -notmatch "a.c")  # False
Write-Host ("abcde" -notmatch "a.bc") # True

大文字・小文字の区別

これらの演算子を使用する際に、 デフォルトでは大文字・小文字は区別されません。 区別したい場合は各演算子の先頭に「c」を付けて 「-clike」「-cmatch」のように記述します。 区別しない場合は「i」をつけて「-ilike」と記述するか、 何もつけずに「-like」と記述します。 次の「-replace」も同じです。

オプション意味
c大文字・小文字を区別する
i区別しない(デフォルト)

「-replace」

「-replace」は文字列を置換するための演算子で、 置換した結果の文字列を返します。

演算子説明
-replace文字列置換

次のサンプルコードでは文字列"abcde"に対して、 "abc"を"xyz"に置換しています。

$s = "abcde" -replace "abc", "xyz"

Write-Host $s  # xyzde
PowerShell