PowerShellで正規表現ドリル作成、横串検索関数を拡張
PowerShellで正規表現ドリル作成、横串検索関数を拡張

以前、デスクトップ上のファイルを横串検索するスニペットでfunction yokogushiを作成している。カレントディレクトリのファイルを対象とした検索を「yokogushi キーワード」で瞬時に総覧できるため、よく活用している。

横串検索関数と正規表現

function yokogushiは、Get-ChildItemで再帰的にファイルを取得し、Select-Stringでパターン検索を行う。公式APIを見ると、Select-Stringには-Patternオプションがあり、正規表現をそのまま使える。

たとえば「検索サーバ」「検索画面」のどちらかにマッチさせたい場合、yokogushi '検索.*(サーバ|画面)'と指定すると、両方にマッチする。任意の一文字を表す「.」と0回以上の連続を表す「*」、そして「(サーバ|画面)」でどちらかで終わる文字列を指定している。

Pickt横長バナー — Telegram用の共同買い物リストアプリ

ログデータでの正規表現活用

特定の形式が並ぶログデータがあれば、それに合わせて探りながらマッチすると理解が深まる。筆者の環境には、気象情報が西暦で並ぶログがある。そこで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にある正規表現の例を試しながらハンズオンできる。習慣化するには手元で遊ぶに限る。得点をつけたり、マッチ部分に色を付けたりもできそうだが、今回はこれでいいだろう。

Pickt記事後バナー — 家族イラスト付きの共同買い物リストアプリ