用正则表达式的匹配问题

用正则表达式的匹配问题

文件已经从服务器上转存到本地了,下面是转存到本地的log.txt文件:
-----------------------------------------------------
192.168.200.100 - - [10/Nov/2008:13:54:10 +0800] "GET / HTTP/1.1" 304 0 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)"
192.168.200.100 - - [10/Nov/2008:13:55:16 +0800] "GET /var/www/html HTTP/1.1" 404 1046 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)"
192.168.200.100 - - [10/Nov/2008:13:56:22 +0800] "GET /index.html HTTP/1.1" 200 57 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)"
--------------------------------------------------------

现在的问题下面的子函数实现了红色部分的解析,如何将剩下的浏览器系统等信息也解析出来(绿色部分)?怎么再追加到下面是的代码中?
……

  

   if ($entry =~/^(\d+\.\d+\.\d+\.\d+)\s-\s-\s\[      #IP Address

                    ([\d\w:\/]+)\s\+\d{4}\]\s\"               #time

                    (\w+)\s                               #Request type

                    \/([^\s]*)                                     #File name

                    ([^\"]*)\"\s                                 #Protocol

                    (\d+)\s                                #Request result

                    (\d+|\-)$/x)                                #Total bytes

   {        

      return ($1,$2,$3,$4,$5,$6,$7);

   }

   warn "Not a normal access log entry.\n$entry\n";

   return undef;

}
问题已经解决了,谢谢大家 追加的部分正则式为: \s\"[^\s]+"\s\"([^\"]*)\"

if ($entry =~/^(\d+\.\d+\.\d+\.\d+)\s-\s-\s\[      #IP Address

                    ([\d\w:\/]+)\s\+\d{4}\]\s\"               #time

                    (\w+)\s                               #Request type

                    \/([^\s]*)                                     #File name

                    ([^\"]*)\"\s                                 #Protocol

                    (\d+)\s                                #Request result

                    (\d+|\-)\s
                    (\".+\")$/x)                                #浏览器
                    ()
这样行吗


[Copy to clipboard] [ - ]
CODE:
#!/usr/bin/perl -w

while (<DATA>) {
    if (/^(\d+\.\d+\.\d+\.\d+)\s-\s-\s\[  #IP Address
            ([\d\w:\/]+)\s\+\d{4}\]\s\"   #time
            (\w+)\s                       #Request type
            (\/[^\s]*)                    #File name
            ([^\"]*)\"\s                #Protocol
            (\d+)\s                       #Request result
            (\d+|\-)                      #Total bytes
            \s\"(\-)\"\s
            (\"([^\s]+)\s    #Mozi...
             \([^\s]+\s                  
             ([^;]+);         #MSIE..
             ([^\)]+)\)\")   #Windows ..
            .*$/x)                     
    {
        print join(" ", ($1,$2,$3,$4,$5,$6,$7,$8,$10,$11,$12)), "\n";
        next;
    }

    warn "Not a normal access log entry:$_\n";
}

__DATA__
192.168.200.100 - - [10/Nov/2008:13:54:10 +0800] "GET / HTTP/1.1" 304 0 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)"
192.168.200.100 - - [10/Nov/2008:13:55:16 +0800] "GET /var/www/html HTTP/1.1" 404 1046 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)"
192.168.200.100 - - [10/Nov/2008:13:56:22 +0800] "GET /index.html HTTP/1.1" 200 57 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)"

有点乱
可以的,