Php 从行中提取内容

Php 从行中提取内容,php,regex,preg-match,phrase,Php,Regex,Preg Match,Phrase,我试图表达我的访问日志文件,为此,我只需逐行读取访问日志文件,并从每行中提取有用的信息,最后将它们添加到数据库中 例如,一条线看起来像这样 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地址。(使用)

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

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

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地址。(使用)

我想提取

  • 此请求值-
    GET/p/V4ZkA5d074CTy_vbFa7nLw,138507078,inedthisinger/12.txt HTTP/1.1

  • 上述部分的整数值-
    inedthis integer

  • 此状态部分-
    200

  • 此字节部分-
    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+)"
    

    有关表达式的解释,请参见。

    这应该可以做到:

    ^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}).*?"(.*?/p/.*?,\d+,(\d+).*?)" "(\d+)" "(\d+)".*$
    
    这里有一把小提琴来演示:

    为了测试的目的,我用一个实际的数字替换了你的“我需要这个整数”,并对“字节”和IP地址进行了一点随机化。以下是捕获,顺序如下:

  • 知识产权
  • 请求(例如
    获取xxx HTTP/1.1
  • 所需URL中的整数
  • HTTP状态
  • 字节计数

  • 您通过选择适当的标记来回答您的问题:使用regex@kingkero问题是如何使用regex实现这一点,我尝试使用上面提到的在线工具,但失败了。这很好,但我不知道你是如何做到的。谢谢斯派克斯