特定ドメイン以外のメールアドレスを検出する正規表現を作ってみた

特定ドメイン以外のメールアドレスを検出する正規表現を作ってみた

特定ドメイン以外のメールアドレスを検出する正規表現を作ってみました。特定ドメイン以外のメールアドレスを検出する正規表現とかの参考にしてください。
2025.10.26

こんにちは、臼田です。

みなさん、正規表現書いてますか?(挨拶

今回はタイトルの通り特殊な要件の正規表現を書いたのでその内容と備忘録のメモです。

特定のドメイン以外のメールアドレスを検出する正規表現

こちらです。

(?i)[\w\d._%+-]+@(?!example\.com)[\w\d.-]+\.[A-Za-z]{2,}

正規表現にもいろいろありますが、Boost.Regexで利用することを想定して書きました。PCREでもだいたい使えそう、らしいです。

構成要素の説明はこんな感じ。

  • (?i) — 大文字/小文字を区別しないフラグ(case-insensitive モードをオンにするインラインフラグ)
  • [\w\d._%+-]+ — ユーザ名部分(word, digit, ., _, %, +, -
  • @
  • (?!example\.com) — ドメインが example.com の場合を除外するネガティブ・ルックアヘッド
  • [\w\d.-]+ — ドメイン名のホスト部分(文字、数字、ドット ., ハイフン -
  • \.[A-Za-z]{2,} — トップレベルドメイン(TLD)部分(ドット . に続くアルファベット 2 文字以上)

背景

機密情報を検出する際など、メールアドレスを正規表現で引っ掛けたいことはありますが、自社内のドメインだけは許容する、みたいな用途がありますよね?

あるいは今回のように例示可能なドメインは許可するなど。

そんなときでも使える正規表現を考えました。

もっといい表現があれば教えて下さい。

テスト文字列

この正規表現を以下の文字列を使って評価できます。

## example.com: マッチしない
user@example.com
## example.net: マッチする
user@example.net

## example.com (大文字): マッチしない
USER@EXAMPLE.COM
## example.net (大文字): マッチする
USER@EXAMPLE.NET

## 混合ケース example.com: マッチしない
User@Example.COM
## 混合ケース example.net: マッチする
User@Example.NET

## CSV途中 example.com: マッチしない
id, name, user@example.com, status
## CSV途中 example.net: マッチする
id, name, user@example.net, status

## 自然文前後スペースあり example.com: マッチしない
ご連絡は support@example.com までお願いいたします。
## 自然文前後スペースあり example.net: マッチする
ご連絡は support@example.net までお願いいたします。

## 自然文前後スペースなし example.com: マッチしない
ご連絡はsupport@example.comまでお願いいたします。
## 自然文前後スペースなし example.net: マッチする
ご連絡はsupport@example.netまでお願いいたします。

## 文末に句読点あり example.com: マッチしない
user@example.com,
## 文末に句読点あり example.net: マッチする
user@example.net,

## サブドメイン付き example.com: マッチする
user@sub.example.com
## サブドメイン付き example.net: マッチする
user@sub.example.net

サブドメインは今回あまり考慮する必要がなかったのでマッチしても気にしないようにしました。

まとめ

この要件で使いたいときの参考にしてください。

この記事をシェアする

FacebookHatena blogX

関連記事