2016-05-01 43 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