Skip to content
DocsAll
技巧

正規表現の実践:よくあるテキスト処理ユースケース

Timi Tian · 公開日 2026年3月24日 · 更新日 2026年7月12日
正規表現Regexテキスト処理

正規表現の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タグを削除してテキストのみ残す:正規表現 <[^>]+>、置換先は空。タグ属性内の>などが失われるため、複雑なケースではパーサーを使います。

デバッグのコツ

テストツールで段階的に検証

正規表現テストツールを使います:

  1. 正規表現を入力
  2. テストテキストを入力(マッチすべき例とマッチすべきでない例を含む)
  3. ハイライトされたマッチ結果を確認
  4. 結果が正しくなるまで段階的に正規表現を調整

まずマッチさせてから最適化

まずマッチする正規表現を書き、それから最適化(パフォーマンス、精度)を考えます。最初から完璧を求めないこと。

オンラインの正規表現可視化を利用

複雑な正規表現は可視化ツールで構造を分解し、各セグメントの意味を整理します。

境界ケースに注意

  • 空文字列
  • 部分的にマッチする文字列
  • 特殊文字を含む文字列
  • 非常に長い文字列

再利用可能な正規表現パターン

中国語文字

[\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正規表現テストツールはブラウザで動作し、書きながらテストでき、テキストはアップロードされません。

T
Timi Tian 创始人 / 全栈工程师

DocsAll 创始人,10 年全栈开发经验,专注浏览器端文档处理技术与隐私保护架构。前新加坡科技公司技术负责人。