TechBlog

正規表現入門|初心者が覚えるべきパターン20選と実践的な使いどころ

by あくえり
#正規表現 #JavaScript #Python #プログラミング基礎 #初心者
正規表現入門ガイド
目次

正規表現とは何か

正規表現(Regular Expression、略して regex または regexp)とは、文字列のパターンを表現するための記法です。「このメールアドレスが正しい形式か確認したい」「ログファイルから日付だけ取り出したい」「特定のパターンの文字列を別の文字列に置換したい」といった処理を、数行のパターン記述で実現できます。

最初は記号だらけで難解に見えますが、基本的なメタ文字(特殊な意味を持つ記号)の意味を覚えれば、驚くほど多くのことができるようになります。


基本メタ文字の意味

まず覚えるべき基本的なメタ文字を整理します。

メタ文字意味
.任意の1文字(改行除く)a.c → abc, adc, a1c
*直前の文字が0回以上ab*c → ac, abc, abbc
+直前の文字が1回以上ab+c → abc, abbc(acは不一致)
?直前の文字が0回または1回colou?r → color, colour
^文字列の先頭^hello → helloで始まる文字列
$文字列の末尾world$ → worldで終わる文字列
\d数字(0〜9)\d+ → 1, 123, 9999
\w英数字またはアンダースコア\w+ → abc, user_name
\s空白文字(スペース、タブ等)\s+ → 空白部分
\D数字以外\D+ → abc, あいう
[]文字クラス(どれか1文字)[aeiou] → 母音1文字
()グループ化・キャプチャ(ab)+ → ab, ababab
{}繰り返し回数の指定\d{3} → 3桁の数字
|または(OR)cat|dog → cat または dog

量指定子の詳細

{}を使うことで、より正確な繰り返し回数を指定できます。

\d{3}     → 数字が正確に3文字
\d{3,}    → 数字が3文字以上
\d{3,5}   → 数字が3〜5文字

実用パターン20選

カテゴリ1:数値・数字

1. 数字のみ(整数)

^\d+$

例:123(一致)、12.3(不一致)、abc(不一致)

2. 整数または小数

^-?\d+(\.\d+)?$

例:3.14-100.5 すべて一致

3. 3桁ごとのカンマ区切り数値

^\d{1,3}(,\d{3})*$

例:1,234,567(一致)、1234567(不一致)

カテゴリ2:文字列の種類

4. 英小文字のみ

^[a-z]+$

5. 英数字のみ(大小문자・数字)

^[a-zA-Z0-9]+$

6. 英数字とハイフン・アンダースコア(ユーザー名向け)

^[a-zA-Z0-9_-]+$

カテゴリ3:連絡先・識別子

7. メールアドレス(実用的なパターン)

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

例:user@example.commy.name+tag@company.co.jp 一致

8. 日本の電話番号(ハイフンあり)

^0\d{1,4}-\d{1,4}-\d{4}$

例:03-1234-5678090-1234-5678 一致

9. 携帯電話番号(ハイフンなし)

^0[789]0\d{8}$

例:09012345678 一致

10. 郵便番号(日本)

^\d{3}-\d{4}$

例:100-0001 一致

カテゴリ4:URL・パス

11. URLの簡易パターン

^https?://[\w/:%#\$&\?\(\)~\.=\+\-]+$

例:https://example.com/path?query=1 一致

12. IPアドレス(IPv4)

^(\d{1,3}\.){3}\d{1,3}$

例:192.168.1.1 一致(値の範囲チェックは別途必要)

カテゴリ5:日付・時刻

13. 日付(YYYY-MM-DD形式)

^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$

例:2026-02-19 一致、2026-13-01 不一致

14. 時刻(HH:MM形式、24時間)

^([01]\d|2[0-3]):[0-5]\d$

例:23:59 一致、24:00 不一致

カテゴリ6:日本語

15. 全角カタカナのみ

^[ァ-ヶー]+$

例:アイウエオプログラミング 一致

16. 全角ひらがなのみ

^[ぁ-ん]+$

17. 漢字・ひらがな・カタカナを含む日本語全般

^[\u3040-\u309F\u30A0-\u30FF\u4E00-\u9FFF]+$

カテゴリ7:パスワード・セキュリティ

18. パスワード強度チェック(8文字以上、英大小文字・数字を含む)

^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,}$

19. クレジットカード番号(簡易、スペース区切り16桁)

^\d{4} \d{4} \d{4} \d{4}$

20. 16進数カラーコード

^#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6})$

例:#FFF#ff5733 一致


JavaScriptでの使い方

JavaScriptでは、正規表現を / / で囲むリテラル形式か、new RegExp() で作成します。

// メールアドレスの検証(test メソッド)
const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;

console.log(emailRegex.test('user@example.com')); // true
console.log(emailRegex.test('invalid-email'));     // false

// 文字列から数字を取り出す(match メソッド)
const text = '電話番号は090-1234-5678です。';
const phoneMatch = text.match(/0\d{2}-\d{4}-\d{4}/);
console.log(phoneMatch[0]); // "090-1234-5678"

// 文字列の置換(replace メソッド)
const input = '今日は   スペースが 多い  文章です。';
const normalized = input.replace(/[\s ]+/g, ' ');
console.log(normalized); // "今日は スペースが 多い 文章です。"

// 全ての一致を取得(matchAll メソッド)
const html = '<a href="https://example.com">link1</a><a href="https://test.jp">link2</a>';
const urlRegex = /href="(https?:\/\/[^"]+)"/g;
const matches = [...html.matchAll(urlRegex)];
matches.forEach(match => console.log(match[1]));
// https://example.com
// https://test.jp

フラグ(修飾子)もよく使います。

// g フラグ:グローバル検索(全ての一致を対象)
// i フラグ:大文字小文字を区別しない
// m フラグ:複数行モード

const text = 'Hello world\nhello WORLD';
const matches = text.match(/hello/gi); // ['Hello', 'hello']

Pythonでの使い方

Pythonでは re モジュールを使います。

import re

# メールアドレスの検証
email_pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
print(re.match(email_pattern, 'user@example.com'))  # Match オブジェクト
print(re.match(email_pattern, 'invalid'))           # None

# 文字列から全ての一致を取得(findall)
text = '2026-02-19 に会議、2026-03-01 に締め切り'
dates = re.findall(r'\d{4}-\d{2}-\d{2}', text)
print(dates)  # ['2026-02-19', '2026-03-01']

# 置換(sub)
phone = '090 1234 5678'
formatted = re.sub(r'(\d{3}) (\d{4}) (\d{4})', r'\1-\2-\3', phone)
print(formatted)  # '090-1234-5678'

# グループのキャプチャ
url = 'https://www.example.com/path'
match = re.match(r'(https?)://([^/]+)(.*)', url)
if match:
    print(match.group(1))  # https
    print(match.group(2))  # www.example.com
    print(match.group(3))  # /path

VS Codeでの正規表現検索

VS Codeの検索機能(Ctrl+F / Cmd+F)では、正規表現を使った検索が可能です。

  1. 検索バーを開く(Ctrl+F)
  2. 検索バー右側の「.*」ボタンをクリックして正規表現モードをオン
  3. パターンを入力して検索

実用例:

  • TODO:.* → コード内の全TODOコメントを検索
  • console\.log\(.*\) → 全てのconsole.log文を検索
  • import .+ from '.+' → 全インポート文を検索

ファイル横断検索(Ctrl+Shift+F)でも正規表現が使えるため、リファクタリング作業で非常に役立ちます。


正規表現を学ぶときの注意点

正規表現は「書けること」より「読めること」が重要です。複雑なパターンはコメントを添えて、何をチェックしているか明記する習慣をつけましょう。また、パフォーマンスを意識する場面では、同じパターンを繰り返し使う場合はコンパイル済みオブジェクトを再利用することが大切です。

正規表現の動作確認には regex101.com が便利です。パターンを入力するとリアルタイムでマッチ結果を確認でき、各部分の意味も丁寧に説明してくれます。

詳説 正規表現 第3版

正規表現のバイブルとして知られる定番書籍。基礎から高度なテクニックまで網羅しており、JavaScriptやPythonなど複数言語での使い方も解説されています。

※ アフィリエイトリンクを含みます

Udemy — 現役シリコンバレーエンジニアが教えるPython 3 入門+応用

Pythonの基礎から正規表現・ファイル操作・スクレイピングまで実践的に学べる人気講座。動画で段階的に学習できます。

¥1,500〜 Udemyで見る

※ アフィリエイトリンクを含みます


まとめ

正規表現は最初は難しく感じますが、今回紹介したパターン20選を実際のコードで使いながら覚えると自然と身についてきます。メールアドレスや電話番号の検証、ログ解析、テキスト置換など、実務で使う場面は非常に多いです。まずは \d(数字)、\w(英数字)、^$(先頭・末尾)の3つを覚え、実際のプロジェクトで試しながら少しずつ習得していきましょう。

共有: