正規表現とは?
正規表現(Regular Expression、regex)とは、文字列のパターンを表現する小さな言語です。
たとえば「メールアドレスかどうかチェックしたい」「ログファイルから日付部分だけ抜き出したい」「電話番号のハイフンを統一したい」——こうした文字列処理を1行のパターンで表現できます。
多くのプログラミング言語(JavaScript、Python、Java、Go、Ruby…)で使え、テキストエディタ(VS Code、Sublime)でも検索に使えます。
基本の記号一覧
- . — 任意の1文字(改行を除く)
- * — 直前の文字が0回以上
- + — 直前の文字が1回以上
- ? — 直前の文字が0回か1回
- {n} — 直前の文字がちょうどn回
- {n,m} — 直前の文字がn〜m回
- ^ — 行頭
- $ — 行末
- [abc] — a、b、cのどれか
- [^abc] — a、b、c以外
- (abc) — グループ化・キャプチャ
- | — または
- \d — 数字 [0-9]
- \w — 英数字+アンダースコア [a-zA-Z0-9_]
- \s — 空白文字(スペース、タブ、改行)
よく使うパターン集
- メールアドレス:
[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,} - URLのhttps:
https?://[^\s/$.?#].[^\s]* - 日本の電話番号:
0\d{1,4}-\d{1,4}-\d{4} - 郵便番号:
\d{3}-\d{4} - 日付(YYYY-MM-DD):
\d{4}-\d{2}-\d{2} - 数字のみ:
^\d+$ - 空行:
^$ - HTMLタグ除去:
<[^>]*>
フラグ(オプション)の使い方
- g(global) — 文字列内の全マッチを検索(デフォルトは最初の1つ)
- i(case insensitive) — 大文字小文字を無視
- m(multiline) — ^と$を各行の先頭・末尾に適用
- s(dotAll) — .が改行文字にもマッチ
JavaScriptでは/pattern/gimsのように末尾にフラグを付けます。PythonではRE.IGNORECASE などのフラグを引数で渡します。
実用例:ログ解析
Nginxのアクセスログから特定のパターンを抽出する例:
IPアドレスを抽出: ^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}
500エラーのみ抽出: " 5\d{2}
特定のパスへのアクセス: /api/v[12]/
このツールにログの1行を貼り付けて、正規表現を試しながらパターンを確認できます。
このツールを作った理由
正規表現は便利だけど、書いたパターンが合っているか確認するのが毎回手間。ブラウザのコンソールで試すか、Rubyのirbを起動するか……。
入力と同時にリアルタイムでマッチ箇所がハイライトされれば、試行錯誤がずっと速くなります。そのシンプルな体験を提供したくて作りました。