匹配Apache访问日志行regex-php


Matching Apache access log line regex php

我需要解析一个apache日志行:

以下是我尝试过的:

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

但它总是返回一个空数组。

您的正则表达式与最后一个元素不匹配。这是已更正的正则表达式。

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

Regex Demo