正規表現の書き方・入門ガイド|よく使うパターン20選

正規表現(Regular Expression)とは、文字列のパターンを記号で表現するための記法であり、検索・抽出・バリデーション・置換に広く使われます。本ガイドでは JavaScript(ECMAScript)の正規表現に基づき、基本記法からメールアドレス・電話番号・URLなど実用パターン20選まで体系的に解説します。

最終更新: 2026年5月22日

目次
  1. 正規表現とは
  2. 基本的な記法
  3. よく使うパターン20選
  4. 正規表現テストツールの使い方
  5. 実践で役立つテクニック
  6. よくある質問

正規表現とは

正規表現(Regular Expression)とは、文字列のパターンをメタ文字と呼ばれる特殊記号で表現する記法です。一致する文字列の検索・抽出・置換・バリデーションを効率的に行うために、プログラミング言語・テキストエディタ・コマンドラインツールなど広範な場面で使われます。

たとえば「ハイフンあり・なしを問わず日本の電話番号すべてにマッチしたい」という場合、単純な文字列検索では難しいですが、正規表現を使えば 0\d{1,4}-?\d{1,4}-?\d{4} のような1行のパターンで表現できます。

本ガイドでは JavaScript(ECMAScript 2023)の正規表現仕様を基準として解説します。PythonやPHPでも基本的なメタ文字の意味は共通ですが、一部の構文(名前付きキャプチャ、Unicode プロパティエスケープなど)はエンジンによって異なる点に注意してください。

正規表現が使われる主な場面

  • フォームバリデーション — メールアドレス・電話番号・郵便番号の形式チェック
  • 文字列の検索・抽出 — ログファイルから特定パターンの行を取得
  • 文字列の置換 — HTMLタグの除去、特定フォーマットへの変換
  • テキスト解析 — CSVパース、マークアップ処理

基本的な記法

基本的な記法とは、正規表現を構成する最小単位のルールであり、「メタ文字」「量指定子」「文字クラス」「アンカー」の4カテゴリに分類されます。

メタ文字(特殊記号)

メタ文字は正規表現エンジンが特別な意味として解釈する記号です。リテラルとして使う場合はバックスラッシュ(\)でエスケープします。

メタ文字意味
.任意の1文字(改行を除く)a.c → "abc", "a1c"
\d数字(0〜9)\d\d → "42"
\D数字以外\D+ → "abc"
\w英数字・アンダースコア\w+ → "hello_1"
\W\w 以外\W → " ", "@"
\s空白文字(スペース・タブ・改行)\s+ → " "
\S空白以外\S+ → "word"
\n改行行末の改行にマッチ
\tタブタブ文字にマッチ

量指定子(繰り返し)

量指定子は直前のパターンが何回繰り返すかを指定します。

記号意味
*0回以上ab* → "a", "ab", "abbb"
+1回以上ab+ → "ab", "abbb"("a"は不可)
?0回または1回colou?r → "color", "colour"
{n}ちょうどn回\d{4} → "2026"
{n,}n回以上\d{3,} → "123", "12345"
{n,m}n〜m回\d{2,4} → "12", "1234"

文字クラス([])

角括弧で囲んだ文字のいずれか1文字にマッチします。^ を先頭に置くと否定になります。

[abc]      # a, b, c のどれか1文字
[a-z]      # 小文字アルファベット
[A-Za-z0-9] # 英数字
[^0-9]     # 数字以外の1文字

アンカー(位置指定)

記号意味
^文字列(行)の先頭
$文字列(行)の末尾
\b単語の境界
\B単語境界以外

グループと選択

(abc)      # キャプチャグループ:abc にマッチし、後から参照可能
(?:abc)    # 非キャプチャグループ:グループ化のみ、結果は保存しない
a|b        # 選択:a または b

よく使うパターン20選

よく使うパターンとは、実務で繰り返し登場するバリデーションや抽出に使える正規表現のテンプレートです。以下のパターンはすべて JavaScript の RegExp で動作確認済みです。

#用途パターンマッチ例
1 メールアドレス ^[a-zA-Z0-9._%+\-]+@[a-zA-Z0-9.\-]+\.[a-zA-Z]{2,}$ [email protected]
2 日本の電話番号(ハイフンあり) 0\d{1,4}-\d{1,4}-\d{4} 03-1234-5678
3 日本の電話番号(ハイフンあり・なし両対応) 0\d{1,4}-?\d{1,4}-?\d{4} 0312345678, 03-1234-5678
4 携帯電話番号 0[789]0-?\d{4}-?\d{4} 090-1234-5678, 08012345678
5 郵便番号(ハイフンあり) \d{3}-\d{4} 100-0001
6 郵便番号(ハイフンあり・なし両対応) \d{3}-?\d{4} 1000001, 100-0001
7 URL(http/https) https?://[\w\-]+(\.[\w\-]+)+([\w\-.,@?^=%&:/~+#]*[\w\-@?^=%&/~+#])? https://example.com/path?q=1
8 日付(YYYY-MM-DD) \d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01]) 2026-04-13
9 日付(YYYY/MM/DD) \d{4}\/(0[1-9]|1[0-2])\/(0[1-9]|[12]\d|3[01]) 2026/04/13
10 時刻(HH:MM) ([01]\d|2[0-3]):[0-5]\d 09:30, 23:59
11 IPアドレス(IPv4) ((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?) 192.168.0.1
12 半角英数字のみ ^[A-Za-z0-9]+$ hello123
13 数字のみ(整数) ^\d+$ 12345
14 全角カタカナ ^[\u30A0-\u30FF]+$ アイウエオ
15 ひらがな ^[\u3041-\u3096]+$ あいうえお
16 HTMLタグ(除去用) <[^>]+> <p class="x">, </div>
17 空白行(除去用) ^\s*$ 空白のみの行
18 クレジットカード番号(基本形) \d{4}[- ]?\d{4}[- ]?\d{4}[- ]?\d{4} 1234-5678-9012-3456
19 16進数カラーコード #([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3}) #FF5733, #f00
20 Windowsファイルパス [A-Za-z]:\\([\w\s\-\.]+\\)*[\w\s\-\.]* C:\Users\name\file.txt

上記のパターンはすべて下記の正規表現テストツールに貼り付けてすぐに動作確認できます。

正規表現テストツールの使い方

正規表現テストツールとは、パターンと文字列を入力するだけでマッチ箇所をリアルタイムでハイライト表示し、キャプチャグループの内容まで確認できる無料のオンラインツールです。

ステップ1:パターンを入力する

正規表現テストツールを開き、「パターン」欄に検証したい正規表現を入力します。スラッシュ(/)で囲む必要はありません。たとえばメールアドレスを確認したい場合は以下を貼り付けます。

^[a-zA-Z0-9._%+\-]+@[a-zA-Z0-9.\-]+\.[a-zA-Z]{2,}$

ステップ2:フラグを選択する

必要に応じてフラグを選択します。

  • g(グローバル) — テキスト全体から全マッチを検索します。デフォルトでオン。
  • i(大文字小文字無視)ABCabc を同一視します。
  • m(複数行)^$ が各行の先頭・末尾に対応します。

ステップ3:テスト文字列を入力して結果を確認する

下のテキストエリアに検証したい文字列を入力または貼り付けます。マッチした箇所が青くハイライト表示され、マッチ数・キャプチャグループ数が即座に表示されます。パターンに誤りがある場合はエラーメッセージが表示されるので、その都度修正してください。

ステップ4:キャプチャグループを確認する

グループ ( ) を含むパターンを使った場合、「キャプチャグループ」エリアにマッチごとの各グループの値が表示されます。たとえば日付パターン (\d{4})-(0[1-9]|1[0-2])-(\d{2}) であれば、グループ1が年、グループ2が月、グループ3が日として表示されます。

ステップ5:実践テクニックを応用する

パターンが期待通り動作することを確認したら、実践で役立つテクニック セクションで紹介する「後方参照」「非貪欲マッチ」「先読み/後読み」などの応用記法を組み合わせて、より複雑な検索・抽出パターンを設計できます。

実践で役立つテクニック

実践で役立つテクニックとは、基本記法を組み合わせてより柔軟なパターンを作るための応用知識です。ここでは現場でよく使われる4つのテクニックを解説します。

キャプチャグループと後方参照

( ) で囲んだ部分はキャプチャグループとして保存され、$1$2 などで参照できます。文字列置換で威力を発揮します。

// YYYY-MM-DD を MM/DD/YYYY に変換
const result = '2026-04-13'.replace(/(\d{4})-(\d{2})-(\d{2})/, '$2/$3/$1');
// result: "04/13/2026"

非キャプチャグループ (?:)

グループ化だけしてキャプチャを不要にする場合は (?:) を使います。キャプチャグループ数が増えて管理が煩雑になるのを防ぎ、わずかに処理が高速化します。

// (?:https?://) は「http://」か「https://」のグループ化のみ、保存しない
/(?:https?:\/\/)[\w\-]+(\.[\w\-]+)+/

先読み(Lookahead)と後読み(Lookbehind)

先読み・後読みは「その位置の前後に何があるか」を条件にするゼロ幅アサーションです。マッチした文字列自体には含まれません。

// 先読み:数字の後に「円」が続く場合のみ数字にマッチ
/\d+(?=円)/   →  "1000円" の "1000" にマッチ

// 否定先読み:「円」が続かない数字
/\d+(?!円)/

// 後読み(ES2018+):「¥」の後に続く数字
/(?<=¥)\d+/

非貪欲マッチ(Lazy Matching)

量指定子のデフォルトは「貪欲(greedy)」で、できるだけ長い文字列にマッチします。? を付けることで「非貪欲(lazy)」になり、できるだけ短い文字列にマッチします。HTMLタグの抽出など、区切りが明確な場合に特に有効です。

// 貪欲:<b>太字</b>と<i>斜体</i> → <b>〜</i> 全体にマッチ
/<.+>/

// 非貪欲:<b> と </b> を個別にマッチ
/<.+?>/

名前付きキャプチャグループ(ES2018+)

(?<name>) で名前を付けると、match.groups.name で取得でき、可読性が上がります。

const re = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/;
const m = '2026-04-13'.match(re);
console.log(m.groups.year);  // "2026"
console.log(m.groups.month); // "04"

よくある質問

正規表現とは何ですか?

正規表現(Regular Expression)とは、文字列のパターンを記号で表現する記法です。特定のルールに合致する文字列の検索・抽出・置換・バリデーションに使われ、プログラミング言語やテキストエディタなど幅広い場面で活用されます。本ガイドでは JavaScript(ECMAScript)の正規表現を基準に解説しています。

JavaScriptで正規表現を使うにはどう書きますか?

JavaScriptでは2通りの記法があります。
(1)リテラル記法:/パターン/フラグ
(2)コンストラクタ記法:new RegExp('パターン', 'フラグ')
動的にパターンを組み立てる場合はコンストラクタ記法、固定パターンはリテラル記法が一般的です。フラグには g(グローバル)、i(大文字小文字無視)、m(複数行)などがあります。

「貪欲マッチ」と「非貪欲マッチ」の違いは何ですか?

貪欲マッチ(greedy)は量指定子(*+{n,m})がデフォルトで採用する動作で、可能な限り長い文字列にマッチします。非貪欲マッチ(lazy)は量指定子の直後に ? を付けることで有効になり、可能な限り短い文字列にマッチします。たとえば <.+> は貪欲で <b>テキスト</b> 全体にマッチしますが、<.+?> は非貪欲で <b> のみにマッチします。

メールアドレスを完全に検証できる正規表現はありますか?

厳密にはRFC 5322に完全準拠した正規表現は非常に複雑になるため、実務では簡略化したパターンが使われます。一般的なバリデーションには /^[a-zA-Z0-9._%+\-]+@[a-zA-Z0-9.\-]+\.[a-zA-Z]{2,}$/ が適しています。最終的な確認はメール送信による確認リンクで行うのがベストプラクティスです。