2013-06-12 101 views
0

HTTP消息在问题后面列出。正则表达式所需的帮助

  1. 我需要一个正则表达式来查找这两个消息中的HTTP状态码。
  2. 另一个在两个消息中找到请求用户的名称。
  3. 最后一个在两个消息中找到时间戳的人。
127.0.0.1 - Johny [17/Dec/2010:17:15:16 -0700] "GET /apache_pb.gif 
HTTP/1.0" 200 2326 

127.0.0.1 - debbie7 [19/Dec/2010:11:11:02 -0700] "GET /apache_pbs.gif 
HTTP/1.0" 404 2336 

谢谢!

+3

你有什么企图? – jrd1

+0

含糊不清的标题无法帮助未来的访问者访问该网站,但同样存在问题。 –

+0

没什么。我是一个正则表达式的初学者(对不起).. – user2476707

回答

2

说明

你可以拉值{用户名,日期和时间使用此正则表达式TP代码}一通:

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

enter image description here

集团0获得整条生产线,而另一组将分别获得相应匹配。

  1. 获取用户名
  2. 得到日戳
  3. 得到HTTP状态代码

PHP代码示例:

您没有选择语言,所以我提出一个PHP示例显示正则表达式的工作方式

给定输入字符串,在第Ë消息区域

127.0.0.1 - Johny [17/Dec/2010:17:15:16 -0700] "GET /apache_pb.gif 
HTTP/1.0" 200 2326 

127.0.0.1 - debbie7 [19/Dec/2010:11:11:02 -0700] "GET /apache_pbs.gif 
HTTP/1.0" 404 2336 

代码示例

<?php 
$sourcestring="your source string"; 
preg_match_all('/^.*?-\s(\S*)\s+\[([^\]]*)\]\s"[^"]*"\s(\d+)\s\d+/im',$sourcestring,$matches); 
echo "<pre>".print_r($matches,true); 
?> 

$matches Array: 
(
    [0] => Array 
     (
      [0] => 127.0.0.1 - Johny [17/Dec/2010:17:15:16 -0700] "GET /apache_pb.gif 
HTTP/1.0" 200 2326 
      [1] => 127.0.0.1 - debbie7 [19/Dec/2010:11:11:02 -0700] "GET /apache_pbs.gif 
HTTP/1.0" 404 2336 
     ) 

    [1] => Array 
     (
      [0] => Johny 
      [1] => debbie7 
     ) 

    [2] => Array 
     (
      [0] => 17/Dec/2010:17:15:16 -0700 
      [1] => 19/Dec/2010:11:11:02 -0700 
     ) 

    [3] => Array 
     (
      [0] => 200 
      [1] => 404 
     ) 

) 
+0

谢谢,这真的有助于通过PHP的角度。 – user2476707

0

HTTP状态:

(?<=HTTP/1.0")\d+ 

请求用户(适用于任何IP地址):

(?<=(\d\d?\d?\.){3}\d\d?\d? -)\w+(?= \[) 

时间戳:

(?<=\[).*(?=\]) 
0

你可以用这个正则表达式努力实现这一点:

^.* (\w*) \[([^\]]*)] \"[\w.\/ ]*\" ([\d]+) 

输入:

127.0.0.1 - Johny [17/Dec/2010:17:15:16 -0700] "GET /apache_pb.gif 
HTTP/1.0" 200 2326 

输出:

Group 1: Johny 
Group 2: 17/Dec/2010:17:15:16 -0700 
Group 3: 200 

可以测试正则表达式here

0

在Perl:

!([a-zA-Z]+) \W+   
(.* -) [\w\W]+ 
HTTP/1.0" \ ([\d]+) 
!x 

$1 -> username 
$2 -> timestamp 
$3 -> status