0

Outlook の電子メール ヘッダーから IP アドレスを解析しようとしています。私は C# でいくつかのことを書き始めました (それは私が活用していた例であるため)、それに近いものを思いつきました。

文字列 lines[] = Regex.Split(headers, @"\r\n"); でヘッダーを分割できます。コマンドは問題ありませんが、lines[] 配列を反復しようとすると、IP アドレスの正規表現が失敗し、値が 2 番目の配列に保存されません。

コード:

private void button1_Click(object sender, EventArgs e)
    {
        // use a string constant to define the mapi property
        string PidTagTransportMessageHeaders = @"http://schemas.microsoft.com/mapi/proptag/0x007D001E";
        string mypattern = @"(#{1,3}\.)(#{1,3}\.)([0-9]{1,3}\.)([0-9]{1,3})";
        // string[] ip = Regex.Split(lines[i], (@"(\(|\[)(#{1,3}\.)(#{1,3}\.)([0-9]{1,3}\.)([0-9]{1,3})(\)|\])"));

        // get a handle on the current message
        Outlook.MailItem message = (Outlook.MailItem)this.OutlookItem;

        // use the property accessor to retreive the header
        string headers = string.Empty;

        try
        {
            headers = (string)message.PropertyAccessor.GetProperty(PidTagTransportMessageHeaders);
        }
        catch { 
        }

        //  if getting the internet headers is successful, put into textbox
        string[] lines = Regex.Split(headers, "\r\n");

        Regex regexObj = new Regex(mypattern);

        for (int i = 0; i < lines.Length; i++)
        {
            MatchCollection matches = regexObj.Matches(lines[i]);                       

        }            
        //eventually write the found IP array into textBox1.Text
       textBox1.Text = headers;
        }
    }
}

ヘルプや提案はありますか?

4

3 に答える 3

1

を に変更し#ます\d

string mypattern = @"(\d{1,3}\.)(\d{1,3}\.)(\d{1,3}\.)(\d{1,3})";

より正確な IPv4 アドレス キャプチャの正規表現は次のようになります。

\b(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\b

...または少なくとも単語の境界を追加します...

\b(\d{1,3}\.)(\d{1,3}\.)(\d{1,3}\.)(\d{1,3})\b

シンプルなIPv6(標準)の場合、私は好きです:

(?<![:.\w])(?:[A-F0-9]{1,4}:){7}[A-F0-9]{1,4}(?![:.\w])
于 2012-08-08T19:06:05.327 に答える
0

IPAddress.Parse メソッドは車輪を再発明しません。

于 2012-08-08T19:16:51.743 に答える
0

IPv4 を一致させようとしている場合は、この獣を試してみてください。実際の IPv4 にかなり近いはずです。\bを囲むことは、単語の始まりと終わりを意味するため、それらを削除して微調整できるはずです。ヘッダー形式に基づいてIPを取得するための心のコンテンツ

\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b
于 2012-08-08T19:41:06.013 に答える