.NET Frameworkで正規表現を使う

仕事でApacheアクセスログの解析する必要が出てきて調査。
まずはログを項目ごとにバラしてやる必要があるんだけど、正規表現を使うと楽そうなことが判明。

.NET FrameworkではSystem.Text.RegularExpressionのRegEx/Matchが正規表現を扱うためのクラス。
これらを使ってApacheのログをばらそうとすると

using System.Text.RegularExpression;

public void ParseApacheLog()
{
 string strApacheLog = @"10.2.3.4 - - [18/Apr/2005:00:10:47 +0900] \"GET / HTTP/1.1\" 200 854 \"-\" \"Mozilla/4.0 (compatible; MSIE 5.5; Windows 98)\""
 RegEx regex = new RegEx(@"^(.*) (.*) (.*) ¥[(.*)¥] "(.*)" (.*) (.*) "(.*)" "(.*)");
 
 Match m = regex.Match(strApacheLog);
 for (int i = 0; i < m.Groups.Count ; ++i)
 {
  Console.WriteLine(m.Groups[i].Value );
 }
}


[出力結果]
10.2.3.4
-
-
18/Apr/2005:00:10:47 +0900
GET / HTTP/1.1
200
854
-
Mozilla/4.0 (compatible; MSIE 5.5; Windows 98)

これだけです。
はじめて正規表現使ったけどいいものですね。

MatchでなくMatchCollectionを使うとなぜか上手くいかない、どうしてだろう。
C#も.NETも初心者なもんでよくわからないけど、とりあえず結果が出ているから気にしないことにする。

以下、参考にしたページ

  1. Apacheログ概論
  2. (@IT)Apacheのログを活用しよう
  3. Webサーバログについて
  4. Apache形式のログを解析する正規表現を教えてください。

[どうでもいいこと] 12桁の免許証番号の謎

http://www.geocities.co.jp/MotorCity-Rally/4099/d2.html

これで「免許証番号で前科がわかる」がガセなのはわかった