PowerShellを使っていると、「この文字列を一括で置換したい」「特定のパターンだけを抽出したい」と思うこと、ありませんか?そんなときに役立つのが「正規表現」です。でも、「正規表現って難しそう…」と感じている方も多いのではないでしょうか?
安心してください!今回は、PowerShellで正規表現を使う方法を、初心者の方にもわかりやすく解説します。これを読めば、あなたも正規表現マスターになれるかも?
正規表現って何?
正規表現とは、文字列のパターンを表現するための「記号の集まり」です。例えば、「数字だけの文字列」「特定の文字で始まる単語」など、文字列の特徴を指定して検索や置換を行うことができます。
PowerShellで正規表現を使う方法
PowerShellでは、正規表現を使うための便利なコマンドレットや演算子が用意されています。主に以下のものがあります
- -match文字列が正規表現に一致するかを確認します。
- -replace正規表現に一致する部分を置換します。
- Select-Stringファイルや文字列内で正規表現を使って検索します。
-match 演算子の使い方
例えば、文字列「abc123」が数字を含むかを確認するには、以下のように記述します
$text = 'abc123'
if ($text -match 'd+') {
"数字が含まれています"
} else {
"数字は含まれていません"
}
この例では、d+が「1回以上の数字」を意味する正規表現です。
-replace 演算子で文字列を置換
文字列「abc123」の数字部分を「数字」に置換するには、以下のように記述します
$text = 'abc123'
$newText = $text -replace 'd+', '数字'
$newText # 出力: abc数字
Select-Stringでファイル内を検索
ファイル「sample.txt」内で「error」という文字列を検索するには、以下のように記述します
Select-String -Path 'sample.txt' -Pattern 'error'
これで、ファイル内の「error」を含む行が表示されます。
よく使う正規表現のパターン
- d任意の1桁の数字(0〜9)
- w任意の1文字の単語文字(アルファベット、数字、アンダースコア)
- s任意の空白文字(スペース、タブ、改行など)
- ^文字列の先頭
- $文字列の末尾
- a、b、cのいずれかの1文字
- a、b、c以外の1文字
- .任意の文字が0回以上繰り返す
実践!ファイル名の一括変更
例えば、フォルダ内のファイル名が「2023年01月01日.txt」のようになっているとします。このファイル名を「20230101.txt」のように変更したい場合、以下のように記述します
Get-ChildItem -Path 'C:Files' -Filter '*.txt' | ForEach-Object {
$newName = $_.Name -replace '(d{4})年(d{2})月(d{2})日', '$1$2$3'
Rename-Item -Path $_.FullName -NewName $newName
}
このスクリプトでは、‘(d{4})年(d{2})月(d{2})日’という正規表現で「2023年01月01日」の部分を抽出し、‘$1$2$3’で「20230101」の形式に変換しています。
よくある質問や疑問
Q1: 正規表現を使うとき、どの演算子を使えばいいですか?
文字列が正規表現に一致するかを確認したいときは-match、一致する部分を置換したいときは-replaceを使います。ファイル内を検索する場合はSelect-Stringが便利です。
Q2: 正規表現のパターンはどこで学べますか?
正規表現のパターンは、インターネット上で多くのリファレンスが公開されています。例えば、正規表現のチートシートやチュートリアルサイトなどがあります。
Q3: 正規表現を使うとき、注意すべき点はありますか?
正規表現は強力ですが、複雑なパターンを使うと処理が遅くなることがあります。必要な範囲でシンプルなパターンを使うよう心がけましょう。
まとめ
PowerShellで正規表現を使うことで、文字列の検索や置換、ファイル名の一括変更などが効率よく行えます。最初は難しく感じるかもしれませんが、少しずつ覚えていけば、作業の効率が格段にアップしますよ!
他にも疑問やお悩み事があれば、お気軽にLINEからお声掛けください。



コメント