匹配Apache访问日志行正则表达式php

我需要解析一个apache日志行:</ p>

这就是我的意思 尝试过:</ p>

  $ line ='136.243.36.82  -   -  [30 / Apr / 2016:17:00:20 -0700]“GET / Socialist / 06/0609Educ。  htm HTTP / 1.1“200 3093” - “”Mozilla / 5.0(兼容; BLEXBot / 1.0; + http://webmeup-crawler.com/)“”redlug.com“'; 

$ regex ='/ ^(\ S +)(\ S +)(\ S +)\ [([^:] +):( \ d +:\ d +:\ d +)([^ ]] +)] \“(\ S +)( 。*?)(\ S +)\“(\ S +)(\ S +)”([^“] *)”“([^”] *)“$ /';

npreg_match($ regex,$ line ,$ match);

die(var_dump($ match));
</ code> </ pre>

但它总是返回一个空数组。</ p>
</ DIV>

展开原文

原文

I need to parse an apache log line:

Here's what I've tried:

$line = '136.243.36.82 - - [30/Apr/2016:17:00:20 -0700] "GET /Socialist/06/0609Educ.htm HTTP/1.1" 200 3093 "-" "Mozilla/5.0 (compatible; BLEXBot/1.0; +http://webmeup-crawler.com/)" "redlug.com"';

$regex = '/^(\S+) (\S+) (\S+) \[([^:]+):(\d+:\d+:\d+) ([^\]]+)\] \"(\S+) (.*?) (\S+)\" (\S+) (\S+) "([^"]*)" "([^"]*)"$/';

preg_match($regex, $line, $match);

die(var_dump($match));

But it always returns an empty array.

dongmu5596
dongmu5596 纠正正则表达式
4 年多之前 回复
doubingguan3425
doubingguan3425 你能给我更多关于你在转储阵列中期望的信息吗?即知识产权,日期,请求方法等......
4 年多之前 回复
dongpao1873
dongpao1873 它不会在你认为的地方结束,regex101.com/r/nS4jL0/1。
4 年多之前 回复

1个回答



你的正则表达式与最后一个元素不匹配。 这是正确的正则表达式。</ p>

  ^(\ S +)(\ S +)(\ S +)\ [([^:] +):( \ d +:\ \ + +:\  d +)([^ ]] +)] \“(\ S +)(。*?)(\ S +)\”(\ S +)(\ S +)“([^”] *)“”([^  “] *)”\ s +“([^”] +)“$ 
</ code> </ pre>

正则表达式演示 </ strong> </ p>
</ div>

展开原文

原文

Your regex wasn't matching last element. This is corrected regex.

^(\S+) (\S+) (\S+) \[([^:]+):(\d+:\d+:\d+) ([^\]]+)\] \"(\S+) (.*?) (\S+)\" (\S+) (\S+) "([^"]*)" "([^"]*)"\s+"([^"]+)"$

Regex Demo

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐