.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も初心者なもんでよくわからないけど、とりあえず結果が出ているから気にしないことにする。
以下、参考にしたページ
[どうでもいいこと] 12桁の免許証番号の謎
http://www.geocities.co.jp/MotorCity-Rally/4099/d2.html
これで「免許証番号で前科がわかる」がガセなのはわかった