「テキストから電話番号だけ抜き出したい」「全角の数字を半角に置換したい」「ログから特定のパターンを検索したい」——こうした作業を1秒で済ませる魔法のような技術が、正規表現 (Regular Expression / 略してRegex) です。
慣れないと暗号にしか見えませんが、文法のコアは意外と少なく、よく使うパターンを覚えてしまえば一気に応用が利きます。この記事では、初めて触る人でも30分後には書けるようになるよう、基本記法から実用パターンまで段階的に解説します。
正規表現とは何か — 文字列を「パターン」で扱う
通常の文字列検索は「完全に一致する文字列」を探します。「東京」を検索すれば「東京」しかヒットしません。一方、正規表現は「パターンに一致する文字列」を探せます。
例えば、「東京から始まる4文字以上の地名」「ハイフンを含む電話番号」「英大文字3文字+数字4桁の郵便番号風」など、抽象的な条件で文字列を扱えます。これがプログラミング、テキストエディタの検索置換、ログ解析などで広く使われる理由です。
本サイトの 正規表現テスター を使うと、書いたパターンが実際にどんな文字列にマッチするか、リアルタイムで確認できます。記事を読みながら手を動かすのが理解への近道です。
基本のメタ文字 — まずこれだけ覚える
正規表現で「特別な意味を持つ記号」をメタ文字と呼びます。最初に覚えるのは次の5つで十分です。
.(ドット)— 任意の1文字。例:a.cはabc,a1c,aXcなどにマッチ。^— 文字列の先頭。例:^Helloは「Helloで始まる」。$— 文字列の末尾。例:com$は「comで終わる」。|— または。例:cat|dogは「catかdogのどちらか」。\— エスケープ。メタ文字を「ただの文字」として扱いたい時に前に付ける。例:3\.14で「3.14」(ドットを文字通りの「.」として扱う)。
文字クラス — 「この中のどれか1文字」
[ ] で括ると、「中に含まれる文字のどれか1文字」を表します。
[abc]— a、b、cのいずれか[a-z]— 小文字英字すべて[0-9]— 数字すべて[a-zA-Z0-9]— 英数字すべて[^abc]— a、b、c以外のどれか(先頭の^は否定の意味)
よく使うショートカット
頻出パターンには専用の省略記法があります。
\d— 数字 1文字([0-9]と同じ)\D— 数字以外 1文字\w— 単語文字(英数字とアンダースコア)\W— 単語文字以外\s— 空白文字(半角スペース、タブ、改行など)\S— 空白以外
量化子 — 「何回繰り返すか」
直前の文字や文字クラスを「何回繰り返すか」を指定するのが量化子です。これを覚えると、一気に表現できる幅が広がります。
*— 0回以上。例:ab*はa,ab,abb,abbb...+— 1回以上。例:ab+はab,abb... (a単独はNG)?— 0回または1回。例:colou?rはcolorとcolourの両方にマッチ。{n}— ちょうどn回。例:\d{4}は数字4桁。{n,}— n回以上。例:\d{3,}は数字3桁以上。{n,m}— n〜m回。例:\d{2,4}は数字2〜4桁。
グループ化と置換 — ( ) で囲む
丸括弧 ( ) で囲むと、その部分を1つのグループとして扱えます。グループは、繰り返しの対象を作ったり、後から参照したりするのに使います。
(abc)+— abc が1回以上繰り返される(abc,abcabc,abcabcabc...)(cat|dog)s?— cat または dog の後に s が0または1つ
後方参照と置換
グループは $1, $2 ... のように番号で参照できます。これは特に「検索して置換」する時に強力です。
- 検索パターン:
(\d{4})-(\d{2})-(\d{2}) - 置換:
$3/$2/$1 - 結果:「2026-06-13」→「13/06/2026」のように日付フォーマットを一括変換できる。
貪欲マッチと非貪欲マッチ
正規表現は、デフォルトでは「できるだけ長くマッチさせよう」とします(貪欲)。これが思わぬ結果を招くことがあります。
例:HTMLから <b>タグの中身を取り出したい時、<b>.*</b> と書くと、「<b>太字1</b>普通の文章<b>太字2</b>」全体が1回でマッチしてしまいます。
これを防ぐには、量化子の後に ? を付けて非貪欲にします。
- 貪欲:
.*— できるだけ長くマッチ - 非貪欲:
.*?— できるだけ短くマッチ
非貪欲版 <b>.*?</b> なら、それぞれの <b>タグを個別に正しく拾えます。
実用パターン集 — そのまま使える正規表現
メールアドレス(簡易)
[\w.+-]+@[\w-]+\.[\w.-]+
完全な RFC 5322 準拠ではありませんが、日常用途では十分です。ログから抽出する、フォーム検証の参考にする、といった用途で使えます。
URL(http/https)
https?://[\w./%?#&=:-]+
日本の電話番号
0\d{1,4}-\d{1,4}-\d{4}
例:「03-1234-5678」「090-1234-5678」「0120-123-456」のように、3つの数字グループがハイフンで区切られたパターン。
郵便番号(日本)
\d{3}-\d{4}
日付(YYYY-MM-DD)
\d{4}-\d{2}-\d{2}
厳密に「実在する日付」を判定するのは正規表現では難しいので、形式チェックに留めるのが定石です。
半角スペース連続を1つにまとめる
検索:\s+ / 置換:(半角スペース1個)
全角英数字を半角に置換する前段階
全角英数字の検索:[A-Za-z0-9]
よくあるハマりどころ
1. メタ文字のエスケープを忘れる
ピリオド .、丸括弧 ( )、プラス + などは特別な意味を持つので、文字通り使いたい時は前に \ が必要です。「3.14」を探すつもりで 3.14 と書くと、「3X14」「3Y14」など別の文字列もマッチしてしまいます。
2. 改行を含む文字列が思った通りに動かない
. はデフォルトでは改行にマッチしません。複数行にまたがるパターンを書きたい時は、言語・ツールによって s フラグ(DOTALL モード)を有効にする必要があります。
3. 言語ごとの方言
JavaScript、Python、PHP、Ruby、Perl など、言語ごとに細部の文法に違いがあります。基本のメタ文字は共通ですが、後方参照の書き方や、lookahead / lookbehind の対応など、応用部分には差があります。
テスト・学習に使えるツール
正規表現は 書きながらテストして覚える のが最も早い学習方法です。
- 本サイトの正規表現テスター:パターンを書くとリアルタイムにマッチ結果を表示。テキストはサーバーに送信されないので、機密データを含むテキストでも安全。
- regex101.com:海外で人気の高機能テスター。各メタ文字の解説も同時表示される。
- テキストエディタの検索置換:VS Code・サクラエディタ・秀丸エディタ等は正規表現対応。日常の置換作業で使うと身につきやすい。
まとめ — 「全部覚える」必要はない
正規表現は奥が深いですが、日常で使う範囲は意外と狭いです。メタ文字5〜6個 + 文字クラスのショートカット + 量化子 + グループ化、これだけ覚えれば日常作業の8割はカバーできます。
最初は完璧を目指さず、テスターで動作を確認しながら少しずつパターンを組み立てていきましょう。1ヶ月もすれば「これ、正規表現で1秒だな」と気付けるようになります。