还有一个使用PHP的apache日志文件正则表达式
我已经读了十几个不同的答案,但都不符合我的要求 我不知道如何编写正则表达式(我无能为力),我需要一些帮助 我正在尝试解析一个Apache日志文件(设置为默认值,因为我没有对它进行任何更改-使用xampp) 我尝试了以下模式,但都漏掉了一些要点:还有一个使用PHP的apache日志文件正则表达式,php,regex,apache,Php,Regex,Apache,我已经读了十几个不同的答案,但都不符合我的要求 我不知道如何编写正则表达式(我无能为力),我需要一些帮助 我正在尝试解析一个Apache日志文件(设置为默认值,因为我没有对它进行任何更改-使用xampp) 我尝试了以下模式,但都漏掉了一些要点: $pat='/(\d+\.\d+\.\d+\.\d+) ([^\s]+) ([^\s]+) \[(\d+)\/(\w+)\/(\d+):(\d{1,2}:\d{1,2}:\d{1,2} ?[\+\-]?\d*)\] "(.*) (HTTP\/\d
$pat='/(\d+\.\d+\.\d+\.\d+) ([^\s]+) ([^\s]+) \[(\d+)\/(\w+)\/(\d+):(\d{1,2}:\d{1,2}:\d{1,2} ?[\+\-]?\d*)\] "(.*) (HTTP\/\d\.\d)" (\d+) (\d+) "([^"]*)" "([^"]*)"/';
$pat="/^(\S+) (\S+) (\S+) \[([^:]+):(\d+:\d+:\d+) ([^\]]+)\] [\w.]+ \"(\S+) (.*?) (\S+)\" (\S+) (\S+) (\".*?\") (\".*?\")$/";
$pat='/^(\S+) \S+ \S+ \[([^\]]+)\] "([A-Z]+)[^"]*" \d+ \d+ "[^"]*" "([^"]*)"$/m';
$pat='/^(\S+) \S+ \S+ \[(.*?)\] "(\S+).*?" \d+ \d+ "(.*?)" "(.*?)"/';
$pat='/^(\S+)\s \S+\s+ (?:\S+\s+)+ \[([^]]+)\]\s "(\S*)\s? (?:((?:[^"]*(?:\\")?)*)\s ([^"]*)"\s| ((?:[^"]*(?:\\")?)*)"\s) (\S+)\s (\S+)\s "((?:[^"]*(?:\\")?)*)"\s "(.*)"$/';
preg_match($pat, $b, $m);
第一个是迄今为止最好的(1000条记录中有113条未命中)
下面是一个缺少的行的示例:
10.21.142.253 - - [25/Oct/2014:07:42:36 -0200] "GET / HTTP/1.1" 302 - "-" "Mozilla/5.0 (Windows NT 6.1; rv:33.0) Gecko/20100101 Firefox/33.0"
它在这样的线路上工作:
127.0.0.1 - - [25/Oct/2014:08:49:51 -0200] "GET /xampp/ HTTP/1.1" 401 1392 "-" "Mozilla/5.0 (Windows NT 6.1; rv:33.0) Gecko/20100101 Firefox/33.0"
文件大小似乎有问题。区别在于您可以添加一个连字符
-
,作为替代(\d+|-)
:
我还将文字空格“转换”为\s+
。如果您对该更改不满意,只需使用您原来的更改:
(\d+\.\d+\.\d+\.\d+) ([^\s]+) ([^\s]+) \[(\d+)\/(\w+)\/(\d+):(\d{1,2}:\d{1,2}:\d{1,2} ?[\+\-]?\d*)\] "(.*) (HTTP\/\d\.\d)" (\d+) (\d+|-) "([^"]*)" "([^"]*)
请参见和您希望获得哪一行?它工作正常<代码>$pat='/(\d+(?:\.\d+){3})s+(\s+)\s+(\s+)\s+\[(\d+)/(\w+)/(\d+):(\d{1,2}:\d{1,2}:\d{1,2}\s?[+-]?\d*)\](.*s+(HTTP\/\d\.\d+)\s+)\s+(\d+)\s*(\d+)\s*(\d+)\s*(\d+)(\d+)\s*(\d+)\s*)(\d+)*)\s+)(\s+)*(\s+)*)/“(\s+)*”(\s+)代码>导致100.000次读取,0次失败。谢谢,太好了。我认为
\s
对于需要调试或更新的较长正则表达式非常有用。此外,使用\s
(非空白)也比使用\s
更安全。
(\d+\.\d+\.\d+\.\d+) ([^\s]+) ([^\s]+) \[(\d+)\/(\w+)\/(\d+):(\d{1,2}:\d{1,2}:\d{1,2} ?[\+\-]?\d*)\] "(.*) (HTTP\/\d\.\d)" (\d+) (\d+|-) "([^"]*)" "([^"]*)