PowerShellの-match演算子は、文字列に対してパターンマッチングを行う際に使用されます。
特にログ解析や文字列操作で役立つ便利な機能です。
基本的な使い方から応用的なテクニックまでを解説します。
基本的な-matchの使い方
-matchは、指定した文字列が正規表現に一致するかを確認する演算子です。以下は基本的な構文です。
$string -match "パターン"
この式は、$stringが正規表現"パターン"に一致する場合に$trueを返し、一致しない場合は$falseを返します。
単純な一致の確認
$string = "Hello, World!"
if ($string -match "World") {
Write-Output "一致しました!"
} else {
Write-Output "一致しませんでした。"
}
上記のコードでは、$stringに「World」という文字列が含まれているため、"一致しました!"が出力されます。
-matchでの結果の取得
-matchを使用すると、一致した内容が自動変数$Matchesに格納されます。$Matchesはハッシュテーブルとして扱われ、キー0には一致した全体の文字列、他のキーには正規表現のキャプチャグループの値が含まれます。
$Matchesの活用
$string = "Error: File not found"
if ($string -match "Error: (.+)") {
Write-Output "エラー内容: $($Matches[1])"
}
この場合、正規表現"Error: (.+)"に一致した部分が$Matches[1]に格納され、以下が出力されます。
エラー内容: File not found
大文字小文字の区別
デフォルトでは、-matchは大文字と小文字を区別しません。大文字小文字を区別したい場合は、-cmatchを使用します。
大文字小文字を区別するマッチング
$string = "Hello, World!"
if ($string -cmatch "world") {
Write-Output "一致しました!"
} else {
Write-Output "一致しませんでした。"
}
このコードでは、大文字小文字が区別されるため、"一致しませんでした。"が出力されます。
配列に対する-match
-matchを配列に使用すると、一致するすべての要素を抽出できます。
配列のフィルタリング
$array = @("apple", "banana", "cherry", "grape")
$result = $array -match "a"
Write-Output $result
上記コードでは、「a」を含む要素が抽出され、以下が出力されます。
apple
banana
grape
複数条件の正規表現
複数の条件を正規表現で扱う例です。
$string = "User ID: 12345, Status: Active"
if ($string -match "User ID: (\d+), Status: (\w+)") {
Write-Output "ID: $($Matches[1]), 状態: $($Matches[2])"
}
以下の出力が得られます。
ID: 12345, 状態: Active
まとめ
PowerShellの-matchは、文字列操作やログ解析に非常に便利な機能です。効率的にスクリプトを作成できるようになります。