正規表現の応用例

以下に、正規表現の応用例をいくつか示します。これらは実際に使われることが多いパターンや興味深いテクニックを含んでいます。


1. パスワードの検証

要件

  • 8文字以上
  • 1つ以上の大文字
  • 1つ以上の小文字
  • 1つ以上の数字
  • 1つ以上の特殊文字(例: !@#$%^&*
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%^&*])[A-Za-z\d!@#$%^&*]{8,}$

説明

  • (?=.*[a-z]):小文字が少なくとも1つ必要
  • (?=.*[A-Z]):大文字が少なくとも1つ必要
  • (?=.*\d):数字が少なくとも1つ必要
  • (?=.*[!@#$%^&*]):特殊文字が少なくとも1つ必要
  • {8,}:8文字以上

2. 電話番号のフォーマット検出

要件

  • 日本の電話番号形式(例: 090-1234-5678
^0\d{1,4}-\d{1,4}-\d{4}$

説明

  • ^0:0で始まる
  • \d{1,4}:1~4桁の数字
  • -:ハイフン
  • 最後に4桁の数字

3. 重複単語の検出

要件

文中で同じ単語が連続して使われている箇所を検出(例: I love love programming.

\b(\w+)\s+\1\b

説明

  • (\w+):単語をキャプチャ
  • \s+:空白
  • \1:キャプチャグループ1の繰り返し

4. 数字のカンマ区切りフォーマット

要件

  • 3桁ごとにカンマを入れる(例: 1,000,000

数字の検出

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

変換の例(Pythonで実装)

import re

number = "1000000"
formatted = re.sub(r'(\d)(?=(\d{3})+$)', r'\1,', number)
print(formatted)  # 出力: 1,000,000

5. メールアドレスの検出

要件

  • 基本的なメールアドレス形式(例: user@example.com
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$

説明

  • ^[a-zA-Z0-9._%+-]+:ユーザー名部分
  • @:アットマーク
  • [a-zA-Z0-9.-]+:ドメイン名
  • \.[a-zA-Z]{2,}$:TLD(トップレベルドメイン)

6. テキストからURLを抽出

要件

  • HTTPまたはHTTPSで始まるURLを抽出
https?://[^\s]+

説明

  • https?httpまたはhttps
  • ://:コロンとスラッシュ
  • [^\s]+:空白以外の文字が続く

応用例(Python)

import re

text = "Check out https://example.com and http://test.com for more info."
urls = re.findall(r'https?://[^\s]+', text)
print(urls)  # 出力: ['https://example.com', 'http://test.com']

7. HTMLタグの削除

要件

HTMLテキストからタグを削除し、プレーンテキストを抽出

<[^>]+>

応用例(Python)

import re

html = "<p>Hello, <b>world</b>!</p>"
text = re.sub(r'<[^>]+>', '', html)
print(text)  # 出力: Hello, world!

8. 重複スペースの削除

要件

複数のスペースを1つに統一

\s{2,}

応用例(Python)

import re

text = "This  is   a    test."
cleaned = re.sub(r'\s{2,}', ' ', text)
print(cleaned)  # 出力: This is a test.

9. 日本語テキストの検出

要件

ひらがな、カタカナ、漢字を含むテキストを検出

[\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Han}]+

応用例

この表現はPythonのregexモジュールなど、Unicode対応が強化されたライブラリで動作します。