正規表現の実践ガイド:検索・置換・バリデーションで使える基本パターン集
テキスト

正規表現の実践ガイド:検索・置換・バリデーションで使える基本パターン集

正規表現の基礎から実務で使える実践パターンまで解説。メールアドレス・電話番号・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)
テキスト差分(diff)2つのテキストやコード差分を色分け表示

検索・置換の実践テクニック

ケース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 で参照できます。

HTMLタグ除去HTMLソースからタグ除去とプレーンテキスト抽出

よくあるミスとデバッグ方法

ミス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 フラグが必要)。

まとめ:正規表現は練習あるのみ

正規表現は最初は難解に見えますが、基本パターンを覚えて実際に使ってみることで、短時間で習得できます。以下のステップで学習しましょう。

  1. 基本メタ文字を覚える. ^ $ * + ? | ( ) [ ]
  2. よく使うパターンを真似る:メアド・電話番号・URL
  3. 正規表現テスターで試す:実際にマッチするか確認
  4. 実務で使ってみる:検索・置換・バリデーションで実践
  5. 複雑なパターンは分割:可読性を保つ

正規表現をマスターすれば、テキスト処理が劇的に効率化します。今日から少しずつ使ってみましょう。

関連記事