PowerShell: 文字列を検索する IndexOf, LastIndexOf, Contains

PowerShellで文字列を検索する場合はいくつか方法があります。
文字列の先頭から検索し、見つかった位置を知りたい場合はIndexOfメソッド、 文字列の最後から検索し、見つかった位置を知りたい場合はLastIndesOfメソッド、 単に文字列が含まれているかどうかを知りたい場合はContainsメソッドを使用します。 いずれも.NET Framework Stringクラスのメソッドです。

IndexOfメソッド: 先頭から検索して見つかった位置を返す

IndexOfメソッドは文字列の先頭から検索し、 見つかった位置を返します。先頭は0で2文字目は1です。 見つからなかった場合の戻り値は「-1」です。

書式
文字列.IndexOf(検索文字列 [, 開始位置])

第1引数に検索文字列を指定し、第2引数には検索開始位置を指定できます。 文字列の途中から検索したい場合は第2引数を指定します。

次のサンプルコードはIndexOfメソッドを使った検索例です。

$s = "abcde"

Write-Host $s.IndexOf("cd")    # 2

Write-Host $s.IndexOf("xyz")   # -1(見つからない場合)

$s = "abcdeabcde"

# 検索開始位置を指定
Write-Host $s.IndexOf("cd", 5) # 7

LastIndexOfメソッド: 最後から検索して見つかった位置を返す

LastIndexOfメソッドはIndexOfとは逆で、 文字列の最後尾から先頭に向かって検索します。 見つからなかった場合の戻り値は「-1」です。
書式
文字列.LastIndexOf(検索文字列 [, 開始位置])

第2引数の開始位置を指定した場合、 指定位置から先頭に向かって検索します。

次のサンプルコードはLastIndexOfメソッドを使った検索例です。

$s = "abcdeabcde"

Write-Host $s.LastIndexOf("cd")    # 7

Write-Host $s.LastIndexOf("xyz")   # -1(見つからない場合)

# 検索開始位置を指定
Write-Host $s.LastIndexOf("cd", 5) # 2

Containsメソッド: 文字列が含まれているかどうかを調べる

Containsメソッドは単に文字列が含まれているかどうかを 知りたい場合に使います。含まれている場合の戻り値はTrue、 そうでない場合はFalseです。

書式
文字列.Contains(検索文字列 [, 比較オプション])

デフォルトでは大文字・小文字を区別して調べます。 大文字・小文字を区別しない場合は第2引数に1を指定します。

次のサンプルコードはContsinsメソッドを使った検索例です。

$s = "abcde"

Write-Host $s.Contains("abc")    # True

Write-Host $s.Contains("xyz")    # False

Write-Host $s.Contains("ABC")    # False

# 大文字・小文字を区別しない
Write-Host $s.Contains("ABC", 1) # True

参考サイト
String クラス (System) | Microsoft Docs

PowerShell
PR