>백엔드 개발 >PHP 튜토리얼 >问个服务器日志的正则怎么写

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

WBOY
WBOY원래의
2016-06-23 14:15:091155검색

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

我想分别匹配日期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"}*/

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

$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"}*/


我想这个日期的格式应该是固定的,你可以按空格将它们分割,例如
$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"}*/

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

这个分不能浪费了

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

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.