以下に、正規表現の応用例をいくつか示します。これらは実際に使われることが多いパターンや興味深いテクニックを含んでいます。
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対応が強化されたライブラリで動作します。