コマンドラインから正規表現に文字列がマッチするか手軽に確認できる手段を作ってみた

正規表現のチェック時に汎用的なものはオンラインチェッカー等を使うことがありましたが、できれば外部への送信自体をなくしたいと思い、コマンドラインベースでできるようにしてみました。
2021.02.01

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

正規表現のパターンを組み立てる際、少々複雑な構成だと正常にマッチしているか確認手段に悩むことがあります。オンラインチェッカーを使う手もありますが、なんらかの固定フレーズが混ざっている場合は万が一を考える状態です。テストケース化という手段もありますが、正規表現の定数を山のように増やすのは本意ではありません。

ライブラリにて良さげなコマンドを導入できるものはないかと探してみましたが見当たらず、プロジェクト内で動作確認用にコミットするとそのリポジトリに依存してしまうこともあり、思い切ってshellにて勝手関数として定義することにしました。

zshrc内に定義する

今回はPythonを用います。業務でPythonを使っているため導入の手間が省けるというだけの理由です。

function reg_check() {
  python -c "import re; a = re.match(\"$1\", \"$2\"); print('\"$1\" match \"$2\"') if a else print('マッチしませんでした');"
}

実際にやってみる

最初にマッチパターンを指定し、その後に該当の文字列を渡します。

% reg_check "^.+Reg$" "iReg"
"^.+Reg$" match "iReg"
% reg_check "^.+Reg$" "iRg"
マッチしませんでした

Pythonのreモジュール動作に依存するため、若干異なる挙動となる指定がされているコード及びプロジェクトの場合は正常動作にならない可能性があります。

あとがき

正規表現チェッカーをブラウザで開いて実行することもありましたが、これで送信するデータについては気を使いすぎることもなくなりそうです。手を動かせば割とすぐに出来上がりそうな代物でしたが、shellscript内で動かした際のシンタックス等、確認が面倒臭そうに思えて放置していました。

グループネームマッチの確認ができる程の融通はないため、より使い勝手を上げたい場合は作り込みが必要になりますが、また必要になった時にチャレンジしようと思います。