i think i got it working correctly. thanks for your help:
my ($ip, $ident, $userid, $time, $cgi, $url, $proto, $status,
$size_tx, $ref, $ua, $size_rx, $re_time) = /^
([-0-9\.]+)\ # ip address
(\S+)\ # identity
(\S+)\ # userid
\[([^]]+)\]\ # time
"([A-Z]*)[\ ]{0,1} # cgi
([^\ ]*)[\ ]{0,1} # url
([^"]*)"\ # proto
([-\d]+)\ # status code
([-\d]+)\ # server doc size
"([^"]*)"\ # referring url
"([^"\\]*(?:\\["\\][^"\\]*)*)"\ # user agent
([-\d]+)\ # request size
([-\d]+) # time to
process request
$/x;
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O"
On Thu, Nov 22, 2012 at 10:29 AM, Shawn H Corey <[email protected]> wrote:
> Oops, I found an error my parser. Here's version 1.0.2:
>
> DATA_LOOP:
> while( my $line = <DATA> ){
> print $line;
>
> my @captured = ( '' );
> my $inside = 0;
>
> CAPTURE_LOOP:
> while( 1 ){
>
> if( $line =~ m{ \G ( [^"\\]+ | \\ ["\\] ) }gcx ){
> $captured[-1] .= $1 if $inside;
> }elsif( $line =~ m{ \G \" }gcx ){
> $inside ^= 1;
> push @captured, '' if ! $inside;
> }else{
> last CAPTURE_LOOP;
> }
>
> }
>
> if( $inside ){
> warn "missing closing quotes\n";
> }else{
> pop @captured; # last item is a bogus empty string
> }
>
> print "\t$_\n" for @captured;
> print "\n";
> }
>
> __DATA__
> "something" 444
> \"escaped quote\" 321
> "\"esc quote\" other stuff" 567
> "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; . NET
> CLR 1.1.4322; msn OptimizedIE8;ESMX)" 556 "\"Mozilla\"" 555
>
>
>
> --
> Just my 0.00000002 million dollars worth,
> Shawn
>
> Programming is as much about organization and communication
> as it is about coding.
>
> Why fit in when you can stand out?
> Dr. Seuss
>
> The only way that problems get solved in real life is with a lot of
> hard work on getting the details right.
> Linus Torvalds
>
> --
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
> http://learn.perl.org/
>
>
--
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
http://learn.perl.org/