我正在试着说出我的访问日志文件,为此我只是逐行读取访问日志文件并从每行中提取有用信息,最后将它们添加到数据库中。
例如,一条线看起来像这样。
124.99.152.202 - naveen [22/Nov/2013:10:41:17 +1300] "GET /p/V4ZkA5d074CTy_vbFa7nLw,1385070078/IneedThisInteger/12.txt HTTP/1.1" "200" "3" "-" "Mozilla/5.0" "-"
我只知道如何提取IP地址。(使用this)
我想提取
此请求值 - GET /p/V4ZkA5d074CTy_vbFa7nLw,1385070078,IneedThisInteger/12.txt HTTP/1.1
来自上述部分的整数值 - IneedThisInteger
此状态部分 - 200
此字节部分 - 3
有时请求网址更改最后一部分,
"GET /p/V4ZkA5d074CTy_vbFa7nLw,1385070078,IneedThisInteger/FOLDER/12.txt HTTP/1.1"
"GET /p/V4ZkA5d074CTy_vbFa7nLw,1385070078,IneedThisInteger/FOLDER/ANOTHER FOLDER/12.txt HTTP/1.1"
"GET /p/V4ZkA5d074CTy_vbFa7nLw,1385070078,IneedThisInteger/FOLDER/ANOTHER FOLDER/HEREIS-ANOTHER-FOLDER-AND-SO-ON/12.txt HTTP/1.1"
所以我真的需要一种稳定的方法来从每一行获取这些值。我该怎么做?
答案 0 :(得分:1)
答案 1 :(得分:1)
这应该可以解决问题:
^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}).*?"(.*?/p/.*?,\d+,(\d+).*?)" "(\d+)" "(\d+)".*$
这是一个演示的小提琴:http://www.rexfiddle.net/3sDwWut
为了测试目的,我用实际数字替换了“我需要这个整数”,并且还将“字节”和IP地址随机化了一点。这些是捕获,按顺序:
GET xxx HTTP/1.1
)