正規表現の3つの実践ユースケース
実践において正規表現は3つの操作に集約されます:
- 検証:テキストが形式に合致するか判定(メールアドレス、電話番号など)
- 抽出:テキストからパターンに合致する内容を見つける(すべてのURL、すべての金額など)
- 置換:パターンに合致する部分を別のものに置き換える(日付形式の統一、電話番号のマスキングなど)
実際のユースケースで実演します。
検証系ユースケース
電話番号の検証
正規表現:^1[3-9]\d{9}$
ポイント:^と$で先頭と末尾を固定し、文字列全体が電話番号であることを保証します(電話番号を含むより長いテキストではない)。2桁目を3〜9に制限するのは現在の番号帯ルールに基づきます。
メールアドレスの検証
正規表現:^[\w.-]+@[\w.-]+.\w+$
ポイント:簡略版で十分です。厳密なメールアドレス正規表現は非常に複雑です。実際のプロジェクトでは簡略版+確認メールの二重保証を使います。
身分証明書の検証
正規表現:^\d{17}[\dXx]$
ポイント:18桁、最初の17桁は数字、最後は数字またはX。これは形式のみを検証し、チェックデジットは検証しません。
URLの検証
正規表現:^https?://[\w.-]+
ポイント:httpまたはhttpsで始まり、ドメインが続きます。簡略版です。完全なURL正規表現は極めて複雑です。
抽出系ユースケース
すべての電話番号を抽出
正規表現:1[3-9]\d{9}
^と$を使わず、テキスト内のすべての電話番号を見つけます。グローバルマッチ(gフラグ)を使います。
すべてのURLを抽出
正規表現:https?://[\w./?=&%-]+
http(s)で始まるURLにマッチします。実際のURLはより複雑な文字を含むため、必要に応じて文字セットを調整します。
すべての金額を抽出
正規表現:[¥$]\d+(?:.\d+)?
¥または$で始まる金額にマッチし、小数は任意です。例:¥100、$99.9。
HTMLタグの内容を抽出
正規表現:<a[^>]*>([^<]+)
aタグ内のテキストを抽出します。括弧のグループでテキスト内容をキャプチャします。このような正規表現によるHTML処理は堅牢ではないため、複雑なHTMLにはパーサーを使う方が安全です。
置換系ユースケース
電話番号のマスキング
中間4桁をアスタリスクに置換:1[3-9]\d{9}を前3桁と後4桁を残すように置換。
実際はキャプチャグループを使います:正規表現 (1[3-9]\d)\d{4}(\d{4})、置換先 1\1****\2。\1と\2がグループを参照します。
日付形式の統一
2026/07/12を2026-07-12に変換:正規表現 (\d{4})/(\d{2})/(\d{2})、置換先 \1-\2-\3。
余分なスペースの削除
連続する複数のスペースを1つに:正規表現 \s+、置換先は単一スペース。
HTMLタグの削除
すべてのHTMLタグを削除してテキストのみ残す:正規表現 <[^>]+>、置換先は空。タグ属性内の>などが失われるため、複雑なケースではパーサーを使います。
デバッグのコツ
テストツールで段階的に検証
正規表現テストツールを使います:
- 正規表現を入力
- テストテキストを入力(マッチすべき例とマッチすべきでない例を含む)
- ハイライトされたマッチ結果を確認
- 結果が正しくなるまで段階的に正規表現を調整
まずマッチさせてから最適化
まずマッチする正規表現を書き、それから最適化(パフォーマンス、精度)を考えます。最初から完璧を求めないこと。
オンラインの正規表現可視化を利用
複雑な正規表現は可視化ツールで構造を分解し、各セグメントの意味を整理します。
境界ケースに注意
- 空文字列
- 部分的にマッチする文字列
- 特殊文字を含む文字列
- 非常に長い文字列
再利用可能な正規表現パターン
中国語文字
[\u4e00-\u9fa5]+
郵便番号
^\d{6}$
QQ番号
^[1-9]\d{4,10}$
16進数カラーコード
^#[0-9a-fA-F]{6}$
バージョン番号
^\d+.\d+.\d+$
よくある落とし穴
貪欲マッチ
.*はマッチしすぎます。タグ内容の抽出には.*ではなく[^<]+を使い、タグをまたぐマッチを避けます。
特殊文字のエスケープ漏れ
ドット、アスタリスク、クエスチョンマークなどのメタ文字をマッチするにはエスケープが必要です。バックスラッシュ自体をマッチするには\と書きます。
複数行マッチ
デフォルトでは.は改行にマッチしません。複数行テキストを処理するには単一行モードを有効にするか、[\s\S]で任意の文字にマッチさせます。
パフォーマンス問題
カタストロフィック・バックトラッキング:(a+)+のようなネストした量指定子は特定の入力で極めて遅くなります。複雑な正規表現のパフォーマンスに注意し、非常に長いテキストは事前に切り詰めてからマッチさせます。
まとめ
正規表現の実践は検証、抽出、置換の3種類に分かれます。検証は^と$で固定、抽出はグローバルマッチ、置換はキャプチャグループの参照を使います。正規表現はまずツールでテスト・検証してから最適化します。よく使うパターン(電話番号、メールアドレス、日付、URL)をいくつか覚えておけば日常には十分です。DocsAll正規表現テストツールはブラウザで動作し、書きながらテストでき、テキストはアップロードされません。