我需要解析一个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