○dirに正規表現
正規表現ドリル機能をPowerShellプロファイルの関数に設置し、暇があればマッチする文字を確認するドリルを実装した筆者であったが、さわっていると関数化したコマンドとの相性が良いことにすぐ気がついた。
というのも、20260718のような西暦日付フォルダにその日の作業ファイルを保存するようにしており、この習慣を活用してdirコマンドと*(アスタリスク)を組み合わせたdeskmemoコマンドで日々の作業で使ったファイルや保存ファイルを総覧しているからだ。
dir 20* -dir | % { dir $_ }
dirはアスタリスクは使えるが正規表現に対応しているわけではない。せっかく正規表現ドリルを作成したのだから、フォルダ階層を正規表現で検索できるコマンドにしてみたいと思った。Where-Objectは、すべての.NETオブジェクトを扱えるため正規表現を使える-match演算子を持っている。
deskmemo2
function deskmemo2 {
param($Pattern)
dir -dir | Where-Object { $_.Name -match $Pattern } | % { dir $_ }
}
-matchのあとの正規表現をパラメータで取得し、dirで表示されるNameを限定。%(Foreachオブジェクト)以降のループで再表示させることが可能だ。
○正規表現で正確にフォルダを探し出す
さて、上記を使って的確に20260821のような8月のフォルダだけを表示するには、正規表現でどう指定すればよいだろうか?意外に難しい。
引数で複雑な正規表現を指定する場合、文字列であることを明確に伝えるためにシングルコートで括る必要があるので、それを踏まえた上で数字(\d)4つに08をそのまま繋げてみた。
deskmemo2 '\d{4}08'
202608と続く8月フォルダはマッチするのだが、7月の20260708フォルダにもマッチしてしまう。正確に8月のフォルダだけをマッチさせるには、08のあとにも数字(\d)2つが続くことを伝えると
deskmemo2 '\d{4}08\d{2}'
無事に7月の20260708フォルダを外すことができる。こちらの.NET公式の正規表現文字クラスのページには、ひらがなやカタカナ、漢字の名前付きブロックが掲載されているのでこれを指定みると
deskmemo2 '^[\p{IsHiragana}\p{IsKatakana}\p{IsCJKUnifiedIdeographs}]'
日本語だけのフォルダを表示させることも可能だ。様々な指定方法がある正規表現だが、これで実際のフォルダ名をもとに正規表現の練習も可能になる。実際のファイルやフォルダを探索しながらズバッと意味のあるファイルへマッチする正規表現があれば、それを関数として記しておくのも良いのかもしれない。











![[USBで録画や再生可能]Tinguポータブルテレビ テレビ小型 14.1インチ 高齢者向け 病院使用可能 大画面 大音量 簡単操作 車中泊 車載用バッグ付き 良い画質 HDMI端子搭載 録画機能 YouTube視聴可能 モバイルバッテリーに対応 AC電源・車載電源に対応 スタンド/吊り下げ/車載の3種類設置 リモコン付き 遠距離操作可能 タイムシフト機能付き 底部ボタン 軽量 (14.1インチ)](https://m.media-amazon.com/images/I/51-Yonm5vZL._SL500_.jpg)