我是C#的新手并且有一个问题。
我的服务器的日志文件包含
等行2015-05-14 20:56:50 72.167.255.87 GET /images/email/site_05_12_2015/email-contactus-button.png - 80 - 50.48.46.50 Mozilla / 5.0 +(兼容; + MSIE + 9.0; + Windows + NT + 6.2; + WOW64; + Trident / 7.0; + Microsoft + Outlook + 15.0.4711; + Microsoft + Outlook + 15.0.4711 ; + MS-办公室; +的MSOffice + 15) 304 0 0 46
我的程序旨在收集请求某项资产的唯一IP地址。在上面一行中,如果程序正在搜索dynamic sql
,我会提取"50.48.46.50"
。
这是:
"email-contactus-button.png"
我得到的第一个编译器警告就行了
using System;
using System.IO;
using System.Text.RegularExpressions;
using System.Collections.Generic;
class Test
{
static void Main(string[] args)
{
// args[0] = expression to search for, e.g. "cloudrealized-email-top-banner"
try
{
string [] logs = System.IO.Directory.GetFiles(System.IO.Directory.GetCurrentDirectory());
Console.WriteLine("{0} log files found", logs.Length);
HashSet<string> ipList;
string ipreg = "^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$";
foreach (string thislog in logs)
{
using (StreamReader sr = new StreamReader(thislog))
{
Console.WriteLine("Checking log file {0} for expression '{1}' ...\n", thislog, args[0]);
String line = sr.ReadToEnd();
if (line.Contains(args[0]))
{
Match thisip = Regex.Match(line,ipreg);
thisip = thisip.NextMatch();
if (thisip.ToString() != args[1]) ipList.Add(thisip);
}
//for (Match m = Regex.Match(line,regx); m.Success; m = m.NextMatch()) ++count;
}
}
Console.WriteLine("\n\nRESULT:\n\nThe asset {0} was requested {1} times.", args[0], ipList.Count());
Console.WriteLine("Unique IPs:");
foreach (string s in ipList) Console.WriteLine(s);
}
catch (Exception e)
{
Console.WriteLine("Error occured: ");
Console.WriteLine(e.Message);
}
}
}
因为它认为我试图逃避string ipreg = "^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$";
字符。我该如何解决这个问题?
另外两个警告是我在.
上调用的方法。它们不被认可,我无法弄清楚原因。我在iplist
查看的文档是https://msdn.microsoft.com/en-us/library/bb359438%28v=vs.110%29.aspx。
答案 0 :(得分:0)
这是一个用于提取该IP地址的正则表达式的基本C#示例。这假设所有日志文件的结构都是相同的。
String service = "http://dbpedia.org/sparql";