2016-05-01 52 views
0

我需要解析的Apache日誌行:匹配Apache的訪問日誌行正則表達式PHP

這是我已經試過:

$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)); 

但它總是返回一個空數組。

+1

它並沒有結束,你認爲它,https://regex101.com/r/nS4jL0/1。 – chris85

+0

您能否給我更多關於您將在轉儲陣列中預期的信息?即IP,日期,請求方法等... –

+0

** [correct](https://regex101.com/r/nS4jL0/2)**正則表達式 – rock321987

回答

0

您的正則表達式與最後一個元素不匹配。這是正確的正則表達式。

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

Regex Demo