Autor Beitrag
detrix
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Mo 16.07.07 10:47 
Hallo,

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

Wenn wir folgende Zeile haben ...

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Mi 18.07.07 14:30 
Vielen Dank! Genau das hab ich gesucht. =)

Grüße detrix