0
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【C#】正規表現を使ってメールアドレスを抽出する

Last updated at Posted at 2017-06-17

自分用。
文字列の中からメールアドレス部分を抽出する必要があったので、正規表現を使ってメールアドレス部分を抽出するメソッドを作成。

メソッド

メソッド
/// <summary>
/// メールアドレス取得
/// </summary>
/// <param name="str">抽出対象文字列</param>
/// <returns>一致する文字列</returns>
private string[] ExtractionMailAddress(string str)
{
    string pat = @"\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b";
    System.Text.RegularExpressions.Regex regex = new System.Text.RegularExpressions.Regex(pat, System.Text.RegularExpressions.RegexOptions.IgnoreCase);
    System.Text.RegularExpressions.MatchCollection matchCol = regex.Matches(str);

    List<string> result = new List<string>();

    foreach(System.Text.RegularExpressions.Match m in matchCol) {
        result.Add(m.Value);
    }

    return result.ToArray<string>();
}

解説

特段なし。
一応、自分の環境で入力される想定の文字列を複数与えてうまく検出できた。
戻り値は文字型の配列なので、文字列に複数のメールアドレスを含んでいた場合にも対応する。
当然だけど、スペースやタブ記号などを含まずに2つ以上のメールアドレスが連なっている場合などはそもそもメールアドレスとして破綻しているので検出できない。

【2017/06/28 追記】
juner氏からご指摘頂いたとおり、RFC5321とRFC5322に準拠していないメールアドレスも抽出してしまいます。
docomoとかauとかの一部キャリアメールが非準拠なメールアドレスが使えるようで、これを弾くかどうかという点については利用ケースで考える必要がある。

参考にしたサイト

正規表現を使って文字列を検索し、抽出する: .NET Tips: C#, VB.NET
正規表現サンプル(メールアドレスを検索する)

NTTドコモ/auの連続ドット/@前ドットメールアドレスの問題 - The blog of H.Fujimoto

0
5
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?