以前、デスクトップ上のファイルを横串検索するスニペットでfunction yokogushiを作成している。カレントディレクトリのファイルを対象とした検索を「yokogushi キーワード」で瞬時に総覧できるため、よく活用している。
横串検索関数と正規表現
function yokogushiは、Get-ChildItemで再帰的にファイルを取得し、Select-Stringでパターン検索を行う。公式APIを見ると、Select-Stringには-Patternオプションがあり、正規表現をそのまま使える。
たとえば「検索サーバ」「検索画面」のどちらかにマッチさせたい場合、yokogushi '検索.*(サーバ|画面)'と指定すると、両方にマッチする。任意の一文字を表す「.」と0回以上の連続を表す「*」、そして「(サーバ|画面)」でどちらかで終わる文字列を指定している。
ログデータでの正規表現活用
特定の形式が並ぶログデータがあれば、それに合わせて探りながらマッチすると理解が深まる。筆者の環境には、気象情報が西暦で並ぶログがある。そこでyokogushi '^\d{4}-08-\d{2}'とすると、8月の日付にマッチする。
このように、ログに対応する形だけを指定する関数を作って設定しておけば、即座に特定気象データを一覧表示できる。活躍頻度が高くなるので、効果的に正規表現を体験する機会も増える。
正規表現練習ツールの作成
正規表現練習サイトや高機能な練習ソフト、書籍も存在する。データがあるところには深い検索機能が必要であり、古くからプログラミング言語に実装されてきた。比較的最近になってExcel関数に正規表現が加わるなど、身につけておきたいスキルといえる。
これらを手軽に試せるドリルを、限られたPowerShell環境で構築してみた。PowerShellでは、正規表現でマッチするオブジェクトを保有する.NETのMatchオブジェクトを使える。
function drill { param($Text, $Pattern) $result = $Text | Select-String $Pattern $result.Matches}Select-Stringに正規表現を入力すると返るMatchオブジェクトのValueにマッチした文字が格納されているので、それを表示させる。
function drill { param($Text, $Pattern) $result = $Text | Select-String $Pattern $result.Matches.Value}マッチしない場合に何も表示されないとわかりにくいので、ifを差し込み定型の文字を返すようにする。以下の関数を、PowerShell上のnotepad $PROFILEで開くプロファイルに記載し、.$PROFILEで反映させる。
function drill { param($Text, $Pattern) $result = $Text | Select-String $Pattern if (-not $result) {"No matches(ハズレ)"return } $result.Matches.Value}一つ目のパラメータに演習用文字列、二つ目のパラメータに正規表現を入れて、マッチしないとハズレ表示される。
こうしておけば、ちょっと空いた時間に本やWebにある正規表現の例を試しながらハンズオンできる。習慣化するには手元で遊ぶに限る。得点をつけたり、マッチ部分に色を付けたりもできそうだが、今回はこれでいいだろう。



