Entwickler-Ecke

Basistechnologien - Apache Access-Log und Regex


detrix - Mo 16.07.07 10:47
Titel: Apache Access-Log und Regex
Hallo,

ich möchte gerne die einzelnen Zeilen des Access-Logs vom Apache in Teilstrings zerlegen.

Wenn wir folgende Zeile haben ...


Quelltext
1:
195.146.134.15 - - [20/Jan/2003:08:55:36 -0800] "GET /path/to/page.html HTTP/1.0" 200 4649 "http://www.somedomain.com/020602/page.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"                    


... dann möchte ich gerne die IP, das Datum, die Datei, etc. jeweils in einen einzelnen String extrahieren.

Ich weiß, dass ich mit "Regulären Ausdrücken" arbeiten muss. =) Nur folgendes Problem:

Kann ich das ganze in einem Zug machen oder immer Stück für Stück. Also erst nach der IP-Addresse suchen (Match), diese
dann aus dem String löschen (Replace), dann nach dem Datum suchen (Match)... Das Replace könnte man sich natürlich auch ersparen...

Oder anderes gefragt: Wie würdet ihr das machen? =)

Steh da vielleich im Moment ein bisschen auf dem Schlauch...

Grüße detrix


Kha - Mo 16.07.07 14:47

Benutze einen einzigen Regex und arbeite mit Gruppen. Gruppen erzeugst du durch Klammerpaare im Regex - den gematchten Inhalt eines Klammerpaars kannst du damit ohne eigene Zerlegung sofort auslesen. Die .Net-Regex-Klasse bietet dir als Sahnehäubchen noch sog. benannte Gruppen, z.B. (?<ip>(\d{1,3}\.){3}\d{1,3})
Damit kannst du sofort die IP-Adresse über match.Groups["ip"].Value abfragen. Näheres siehe SDK:"regular expressions, grouping constructs".


detrix - Mi 18.07.07 14:30

Vielen Dank! Genau das hab ich gesucht. =)

Grüße detrix