💻

プログラム初学者に正規表現の勧め

2025/01/26に公開

正規表現を使われているでしょうか?
使いこなせると色々便利で個人的にかなり好きな技術です。
どんな場面で使用するか、どんな使い方ができるかという点で紹介したいと思います。
作業効率アップにも繋がりますのでぜひ習得をオススメしたいです。

どんな場面で使うか?

  • バリデーションチェック処理
  • テキストファイル、ソースファイル内のgrep検索
    • ログ調査
  • テキストの置換・位置の入れ替えがしたい(Excelは重いので使いたくない!)

どんな感じで使うか?

バリデーションなどの文字列の場合

ID・パスワードのチェックを独自ポリシーでチェックしたい場合に正規表現を使います。
現場でPGしていてもバリデーションで正規表現を書くことは割とあるかと思います。

使用例

IDが半角英数字で入力されているか
^[0-9a-zA-Z]+$
パスワードが半角英数字・記号・8文字以上で入力されているか
^[ -~]{8,}$


テキストファイル、ソースファイル内のgrep検索

ログ調査

本番環境で稼働しているログは情報量が膨大になっているため、
欲しい情報を絞り込むために正規表現を使うことができます。

使用例
ログ例
INFO 2025-01-01 13:33:33.333 sample message.
INFO 2025-01-01 14:40:00.000 REGIST START.
ERROR 2025-01-01 14:40:10.100 REGIST FAILURE.
WARN 2025-01-01 14:55:55.555 sample message.

ログファイルから14:00 ~ 14:59に出力されたメッセージ行だけ抽出する。
^.*14:[0-5][0-9].*$

更に「REGIST FAILURE」など特定のメッセージを絞り込むことも可能です。
^.*14:[0-5][0-9].*REGIST FAILURE.*$

また、複数行にわたって文字列を検索するということも可能です。
例えば、「REGIST START」が出力された次の行に
「FAILURE」という文字が出力されているものを検索する場合
^.*REGIST START.*\n.*FAILURE.*$

ログレベルが「ERROR」もしくは「WARN」のみの行を抽出する。
^(WARN|ERROR).*


テキストの置換・位置の入れ替えがしたい

テキストの置換や入れ替えなどのデータ加工にも便利です。
VS Codeなどのエディタを使って正規表現にマッチした文字を置換できます。

使用例

csvファイルの列を入れ替える
検索ボックス ^([0-9a-zA-Z]+),([0-9a-zA-Z]+),([0-9a-zA-Z]+)$
置換ボックス $2,$3,$1

重複する行を1行にまとめる※あらかじめテキストのソートが必要です。
検索ボックス (^.*$)(\n(^\1$)){1,}
置換ボックス $1


現場でちょっとしたテキストの加工、
ログ・ソースの中をgrepすることって結構あるかと思います。
正規表現の構文や使い方などに興味を持ってもらえたらと思います。

Discussion