分かりやすく、使いやすく。

文字列を検索し最後に一致した場所を取得する方法

スポンサーリンク

Powershell で文字列を検索し最後に一致した場所(文字列の右側から検索して最初に一致した場所)を取得するには LastIndexOf を使用します。 LastIndexOf は先頭から何文字目が一致したかを返しますが、一致した場所が 1 文字目なら 0 、2 文字目なら 1 を返します。半角文字と全角文字のいずれも同じように 1 文字でカウントされます。

サンプルコードは次の通りです。

PowerShell(実行可能なサンプルコード)
1
2
3
4
5
6
7
8
9
10
11
12
$str = '012345678901234567890123456789'
 
Write-Host $str.LastIndexOf('0')  # 20 と出力(=21文字目)
Write-Host $str.LastIndexOf('1')  # 21 と出力(=22文字目)
Write-Host $str.LastIndexOf('2')  # 22 と出力(=23文字目)
Write-Host $str.LastIndexOf('3')  # 23 と出力(=24文字目)
Write-Host $str.LastIndexOf('4')  # 24 と出力(=25文字目)
Write-Host $str.LastIndexOf('5')  # 25 と出力(=26文字目)
Write-Host $str.LastIndexOf('6')  # 26 と出力(=27文字目)
Write-Host $str.LastIndexOf('7')  # 27 と出力(=28文字目)
Write-Host $str.LastIndexOf('8')  # 28 と出力(=29文字目)
Write-Host $str.LastIndexOf('9')  # 29 と出力(=30文字目) 

次のサンプルコードでは、半角文字と全角文字が同じように 1 文字とカウントされている様子が分かります。

PowerShell(実行可能なサンプルコード)
1
2
3
4
5
6
7
8
9
10
11
12
$str = '0123456789零一二三四五六七八九0123456789'
 
Write-Host $str.LastIndexOf('0')  # 20 と出力(=21文字目)
Write-Host $str.LastIndexOf('1')  # 21 と出力(=22文字目)
Write-Host $str.LastIndexOf('2')  # 22 と出力(=23文字目)
Write-Host $str.LastIndexOf('3')  # 23 と出力(=24文字目)
Write-Host $str.LastIndexOf('4')  # 24 と出力(=25文字目)
Write-Host $str.LastIndexOf('5')  # 25 と出力(=26文字目)
Write-Host $str.LastIndexOf('6')  # 26 と出力(=27文字目)
Write-Host $str.LastIndexOf('7')  # 27 と出力(=28文字目)
Write-Host $str.LastIndexOf('8')  # 28 と出力(=29文字目)
Write-Host $str.LastIndexOf('9')  # 29 と出力(=30文字目) 

複数の文字を組み合わせた文字列でのマッチングも可能です。

PowerShell(実行可能なサンプルコード)
1
2
3
$str = '12345XXXXX12345YYYYY12345ZZZZZ'
 
Write-Host $str.LastIndexOf('12345')  # 20 と出力(=21文字目) 

ちなみに文字列を検索して最初に一致した場所を取得するには IndexOf を使用します。詳細は文字列を検索し最初に一致した場所を取得する方法を参照してください。

スポンサーリンク