2016-05-01 14 views
0

Ich brauche eine Apache-Log-Zeile zu analysieren:Matching Apache Zugriffsprotokoll Linie regex php

Hier ist, was ich versucht habe:

$line = '136.243.36.82 - - [30/Apr/2016:17:00:20 -0700] "GET /Socialist/06/0609Educ.htm HTTP/1.1" 200 3093 "-" "Mozilla/5.0 (compatible; BLEXBot/1.0; +http://webmeup-crawler.com/)" "redlug.com"'; 

$regex = '/^(\S+) (\S+) (\S+) \[([^:]+):(\d+:\d+:\d+) ([^\]]+)\] \"(\S+) (.*?) (\S+)\" (\S+) (\S+) "([^"]*)" "([^"]*)"$/'; 

preg_match($regex, $line, $match); 

die(var_dump($match)); 

Aber es gibt immer ein leeres Array.

+1

Es endet nicht, wo man es tut denken, https://regex101.com/r/nS4jL0/1. – chris85

+0

Könnten Sie mir mehr Informationen darüber geben, was Sie erwarten würden? d. h. IP, Datum, Anforderungsmethode usw. –

+0

** [korrigiert] (https://regex101.com/r/nS4jL0/2) ** Regex – rock321987

Antwort

0

Ihre Regex stimmte nicht mit dem letzten Element überein. Dies ist korrigierter Regex.

^(\S+) (\S+) (\S+) \[([^:]+):(\d+:\d+:\d+) ([^\]]+)\] \"(\S+) (.*?) (\S+)\" (\S+) (\S+) "([^"]*)" "([^"]*)"\s+"([^"]+)"$ 

Regex Demo