
正規表現の実践ガイド:検索・置換・バリデーションで使える基本パターン集
正規表現の基礎から実務で使える実践パターンまで解説。メールアドレス・電話番号・URL・郵便番号のバリデーション、検索・置換のテクニック、よく使うメタ文字・量指定子・文字クラスを具体例付きで紹介します。
正規表現とは?なぜ必要なのか
正規表現(Regular Expression、略してRegEx)は、文字列のパターンを記述するための言語です。「特定のパターンに一致する文字列を検索・抽出・置換する」作業を、わずか数行のコードで実現できます。
例えば、「メールアドレスとして有効な文字列かどうかを判定する」場合、通常のプログラミングでは数十行のif文が必要ですが、正規表現なら1行で完結します。
正規表現が活躍する場面
- バリデーション:入力フォームで正しい形式かチェック(メアド・電話番号・郵便番号)
- 検索・抽出:ログファイルから特定のエラーメッセージを抽出
- 置換:大量のテキストファイルで一括置換(例:全ての電話番号を隠す)
- データクレンジング:不要なスペース・改行を一括削除
正規表現の基本構文
メタ文字(特殊な意味を持つ文字)
| 文字 | 意味 | 例 |
|---|---|---|
. | 任意の1文字 | a.c → "abc", "a9c", "a c" |
^ | 行の先頭 | ^Hello → 行頭が"Hello"で始まる |
$ | 行の末尾 | world$ → 行末が"world"で終わる |
* | 直前の文字が0回以上 | ab*c → "ac", "abc", "abbc" |
+ | 直前の文字が1回以上 | ab+c → "abc", "abbc"("ac"は不可) |
? | 直前の文字が0回または1回 | ab?c → "ac", "abc" |
| | OR(いずれか) | cat|dog → "cat" or "dog" |
() | グループ化 | (ab)+ → "ab", "abab", "ababab" |
[] | 文字クラス(いずれか1文字) | [abc] → "a", "b", "c" |
[^] | 否定文字クラス(これ以外) | [^abc] → "a", "b", "c"以外 |
エスケープが必要な特殊文字
以下の文字をそのまま検索したい場合は、\ でエスケープします。
\ ^ $ . * + ? ( ) [ ] { } | /
例:$100 を検索したい場合 → \$100
よく使う文字クラス・ショートハンド
| パターン | 意味 | 同等表現 |
|---|---|---|
\d | 数字 | [0-9] |
\D | 数字以外 | [^0-9] |
\w | 単語文字(英数字+_) | [a-zA-Z0-9_] |
\W | 単語文字以外 | [^a-zA-Z0-9_] |
\s | 空白文字(スペース・タブ・改行) | [ \t\n\r\f\v] |
\S | 空白文字以外 | [^ \t\n\r\f\v] |
例:「3桁の数字」を検索 → \d{3}
例:「英数字4〜8文字」を検索 → \w{4,8}
実務で使える正規表現パターン集
メールアドレスのバリデーション
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
説明:
^...$: 文字列全体にマッチ[a-zA-Z0-9._%+-]+: ローカル部(@の前)@: アットマーク[a-zA-Z0-9.-]+: ドメイン名\.[a-zA-Z]{2,}: トップレベルドメイン(.com、.jpなど)
日本の電話番号(ハイフンあり・なし対応)
^0\d{1,4}-?\d{1,4}-?\d{4}$
説明:
^0: 0から始まる\d{1,4}: 市外局番(1〜4桁)-?: ハイフンが0回または1回\d{1,4}-?\d{4}: 市内局番と加入者番号
例:03-1234-5678、090-1234-5678、0312345678 すべてマッチ
URLの抽出
https?:\/\/[\w\/:%#\$&\?\(\)~\.=\+\-]+
説明:
https?: httpまたはhttps:\/\/: ://(スラッシュをエスケープ)[\w\/:%#\$&\?\(\)~\.=\+\-]+: URL許可文字
日本の郵便番号(〒123-4567)
^\d{3}-\d{4}$
説明:
^\d{3}: 3桁の数字で始まる-: ハイフン\d{4}$: 4桁の数字で終わる
日付(YYYY-MM-DD形式)
^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$
説明:
\d{4}: 年(4桁)(0[1-9]|1[0-2]): 月(01〜12)(0[1-9]|[12]\d|3[01]): 日(01〜31)
検索・置換の実践テクニック
ケース1:全ての電話番号を「-**-***」に置換
検索:0\d{1,4}-?\d{1,4}-?\d{4}
置換:***-****-****
ケース2:HTMLタグを全て削除
検索:<[^>]+>
置換:(空文字)
説明:<[^>]+> は「<で始まり、>以外が1回以上続き、>で終わる」を意味します。
ケース3:行頭のスペースをすべて削除
検索:^\s+
置換:(空文字)
説明:^ は行頭、\s+ は1個以上の空白。
ケース4:キャプチャグループを使った並び替え
元テキスト:田中太郎(Tanaka Taro)
検索:(.+)((.+))
置換:$2 - $1
結果:Tanaka Taro - 田中太郎
説明:() でキャプチャしたグループを $1, $2 で参照できます。
よくあるミスとデバッグ方法
ミス1:エスケープ忘れ
. や * をそのまま検索すると、メタ文字として解釈されます。
誤:file*.txt → 「fileの後に任意文字が0回以上、.txt」
正:file\*.txt → 「file*.txt」という文字列
ミス2:欲張りマッチ(greedy)
.* は最長一致するため、意図しない範囲までマッチします。
例:<div>Hello</div><div>World</div> に対して <div>.*</div> を適用
→ <div>Hello</div><div>World</div> 全体がマッチ(意図しない)
解決:非欲張りマッチ .*? を使う
→ <div>.*?</div> → <div>Hello</div> と <div>World</div> を個別にマッチ
ミス3:改行をまたぐマッチができない
デフォルトでは . は改行にマッチしません。
解決:s フラグ(dotall)を有効にする、または [\s\S] を使う。
FAQ:正規表現に関するよくある質問
Q1. 正規表現はどの言語・ツールで使える?
A. ほぼすべてのプログラミング言語(JavaScript、Python、Java、PHP、Ruby等)とテキストエディタ(VS Code、Sublime Text、Vim)、コマンドラインツール(grep、sed、awk)で使えます。ただし、細かい構文や機能(先読み・後読み等)は言語によって異なる場合があります。
Q2. 正規表現が複雑すぎて読めない…
A. 正規表現は「書き捨てコード」になりがちです。可読性を保つために、以下の工夫をしましょう。
- コメントを付ける(多くの言語で
(?#コメント)が使える) - 変数に分割して組み合わせる
- 正規表現テスターツールで段階的にテスト
例:regex101.com、regexr.com などのオンラインツールが便利。
Q3. 正規表現で「全角カタカナのみ」を指定するには?
A. ^[ァ-ヶー]+$ を使います。Unicodeプロパティが使える環境では ^\p{Katakana}+$ も可能です(JavaScriptの u フラグが必要)。
まとめ:正規表現は練習あるのみ
正規表現は最初は難解に見えますが、基本パターンを覚えて実際に使ってみることで、短時間で習得できます。以下のステップで学習しましょう。
- 基本メタ文字を覚える:
. ^ $ * + ? | ( ) [ ] - よく使うパターンを真似る:メアド・電話番号・URL
- 正規表現テスターで試す:実際にマッチするか確認
- 実務で使ってみる:検索・置換・バリデーションで実践
- 複雑なパターンは分割:可読性を保つ
正規表現をマスターすれば、テキスト処理が劇的に効率化します。今日から少しずつ使ってみましょう。
関連記事


