繁体   English   中英

从一行中提取内容

[英]Extract contents from a line

我试图用短语表达我的访问日志文件,为此,我只是简单地逐行读取访问日志文件,并从每行中提取有用的信息,最后将它们添加到数据库中。

例如,一条线看起来像这样。

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地址。(使用此方法

我要提取

  1. 此请求值GET /p/V4ZkA5d074CTy_vbFa7nLw,1385070078,IneedThisInteger/12.txt HTTP/1.1

  2. 上面部分的整数值IneedThisInteger

  3. 这个状态的一部分200

  4. 该字节的第3

有时要求更改URL是最后一部分

"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"

因此,我确实需要一种稳定的方法来从每一行中获取这些值。

假设您总是有GET请求,这应该可以解决问题

"(GET /.*?/.*?,\d+,(\d+)/.*?)"\s"(\d+)"\s"(\d+)"

有关表达式的解释,请参见regex101.com

这应该可以解决问题:

^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}).*?"(.*?/p/.*?,\d+,(\d+).*?)" "(\d+)" "(\d+)".*$

这是一个小提琴来演示: http : //www.rexfiddle.net/3sDwWut

为了测试目的,我用实际数字替换了您的“我需要此整数”,并且还对“字节”和IP地址进行了一些随机化处理。 这些是捕获,按顺序:

  1. 知识产权
  2. 请求(例如GET xxx HTTP/1.1
  3. 您想要的网址中的整数
  4. HTTP状态
  5. 字节数

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM