「メールアドレスの検証、どうしよう…」そう思ってとりあえずStack Overflowを開き、よくわからない正規表現をコピペした経験、ありませんか?😅
実は今、海外の開発者コミュニティでこのテーマが話題になっています。「Stack OverflowからRegexをコピペするのをやめよう」という主張です。
正規表現(Regex)って、書くのが難しいのはもちろんですが、読むのもかなりつらいですよね。たとえばこんな文字列を見た瞬間、頭が真っ白になる方も多いはずです。
^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$
「これ、何をしているコードですか?」と聞かれて即答できますか?✋
🔍 コピペRegexの何が問題なの?
コピペ自体が悪いわけではありません。問題は次の点です。
- ✅ 動作を理解していないまま本番コードに組み込む
- ✅ エッジケース(特殊な入力)で予期せぬ挙動をする
- ✅ セキュリティ上の穴になりうる(ReDoS攻撃など)
- ✅ 後から読んだ人(自分含む)が意味を追えない
特にセキュリティが絡むバリデーション処理では、「なんとなく動く」では済まされない場面が多々あります。
🤖 AIを使って「読めるRegex」を作る
最近注目されているアプローチが、AIにRegexを説明させる・生成させるやり方です。ポイントは「コードを生成してもらうだけでなく、意味も一緒に確認する」こと。
たとえばPythonでこんなふうに使えます。
# Pythonでメールアドレスをバリデーションする例
import re
def validate_email(email: str) -> bool:
# ポイント: 各パートの意味を理解した上で使う
# ^ ............. 文字列の先頭
# [a-zA-Z0-9_.+-]+ ... ローカルパート(英数字・記号)
# @ ............. アットマーク
# [a-zA-Z0-9-]+ .... ドメイン名
# \. ............ ドット(エスケープ必須)
# [a-zA-Z0-9-.]+ ... TLD(.comや.jpなど)
# $ ............. 文字列の末尾
pattern = r'^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$'
return bool(re.match(pattern, email))
# 動作確認
print(validate_email(





