Home > Backend Development > PHP Tutorial > 问个服务器日志的正则怎么写

问个服务器日志的正则怎么写

WBOY
Release: 2016-06-23 14:15:09
Original
1155 people have browsed it

2013-06-23 04:33:51 W3SVC1539885 198.56.185.162 GET /robots.txt - 80 - 66.249.75.65 Mozilla/5.0+(compatible;+Googlebot/2.1;++http://www.google.com/bot.html) 404 0 2
Copy after login

我想分别匹配日期2013-06-23/时间04:33:51/服务器ip198.56.185.162/文件地址robots.txt/蜘蛛ip66.249.75.65/蜘蛛信息Mozilla/5.0+(compatible;+Googlebot/2.1;++http://www.google.com/bot.html)/状态码404 0 2/,这个如何精确匹配?


回复讨论(解决方案)

最好举一个特定的例子,然后给出你期望的结果,你的问题表示看不懂

最好举一个特定的例子,然后给出你期望的结果,你的问题表示看不懂
代码就是特定的例子,我想取的值标注在下面,就是想写一句话正则匹配,用pregmatch这种生成一个数组然后我再干点其他的事。

我想这个日期的格式应该是固定的,你可以按空格将它们分割,例如

$log = '2013-06-23 04:33:51 W3SVC1539885 198.56.185.162 GET /robots.txt - 80 - 66.249.75.65 Mozilla/5.0+(compatible;+Googlebot/2.1;++http://www.google.com/bot.html) 404 0 2';var_dump( explode(' ', $log) ); /**array(14) {  [0]=>  string(10) "2013-06-23"  [1]=>  string(8) "04:33:51"  [2]=>  string(12) "W3SVC1539885"  [3]=>  string(14) "198.56.185.162"  [4]=>  string(3) "GET"  [5]=>  string(11) "/robots.txt"  [6]=>  string(1) "-"  [7]=>  string(2) "80"  [8]=>  string(1) "-"  [9]=>  string(12) "66.249.75.65"  [10]=>  string(72) "Mozilla/5.0+(compatible;+Googlebot/2.1;++http://www.google.com/bot.html)"  [11]=>  string(3) "404"  [12]=>  string(1) "0"  [13]=>  string(1) "2"}*/
Copy after login
Copy after login
Copy after login

我想这个日期的格式应该是固定的,你可以按空格将它们分割,例如

$log = '2013-06-23 04:33:51 W3SVC1539885 198.56.185.162 GET /robots.txt - 80 - 66.249.75.65 Mozilla/5.0+(compatible;+Googlebot/2.1;++http://www.google.com/bot.html) 404 0 2';var_dump( explode(' ', $log) ); /**array(14) {  [0]=>  string(10) "2013-06-23"  [1]=>  string(8) "04:33:51"  [2]=>  string(12) "W3SVC1539885"  [3]=>  string(14) "198.56.185.162"  [4]=>  string(3) "GET"  [5]=>  string(11) "/robots.txt"  [6]=>  string(1) "-"  [7]=>  string(2) "80"  [8]=>  string(1) "-"  [9]=>  string(12) "66.249.75.65"  [10]=>  string(72) "Mozilla/5.0+(compatible;+Googlebot/2.1;++http://www.google.com/bot.html)"  [11]=>  string(3) "404"  [12]=>  string(1) "0"  [13]=>  string(1) "2"}*/
Copy after login
Copy after login
Copy after login


我想这个日期的格式应该是固定的,你可以按空格将它们分割,例如
$log = '2013-06-23 04:33:51 W3SVC1539885 198.56.185.162 GET /robots.txt - 80 - 66.249.75.65 Mozilla/5.0+(compatible;+Googlebot/2.1;++http://www.google.com/bot.html) 404 0 2';var_dump( explode(' ', $log) ); /**array(14) {  [0]=>  string(10) "2013-06-23"  [1]=>  string(8) "04:33:51"  [2]=>  string(12) "W3SVC1539885"  [3]=>  string(14) "198.56.185.162"  [4]=>  string(3) "GET"  [5]=>  string(11) "/robots.txt"  [6]=>  string(1) "-"  [7]=>  string(2) "80"  [8]=>  string(1) "-"  [9]=>  string(12) "66.249.75.65"  [10]=>  string(72) "Mozilla/5.0+(compatible;+Googlebot/2.1;++http://www.google.com/bot.html)"  [11]=>  string(3) "404"  [12]=>  string(1) "0"  [13]=>  string(1) "2"}*/
Copy after login
Copy after login
Copy after login

但是服务器日志不是每行都是这样的,有很多#开头的,所以才想做个正则过滤掉其他格式的。

这个分不能浪费了

日志文件一般都很大
你需要在循环中逐行读取,拆分成数组

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template