how do i capture all quoted strings?

this gives an error:

print "$str1\n";
($one, $two) = $str1 =~/"([^(?:[^"]")]*)" (\d+)/;
print "$one $two\n";

what i want is:
$str1 = "\"something\" 444";
$str1 = "\"\\\"escaped quote\\\" 321";
$str1 = "\"\\\"esc quote\\\" other stuff\" 567";

to match - and sometimes there are spaces before the match, a '\' with
no '"', etc. i'm trying to match a useragent in an apache log file.
i've gone through the source of a few modules that claim to do this
and i can't figure out how they're doing it.

here's a test (the later case is what's really got me btw):


#!/usr/bin/perl

use strict;
use warnings;

my $str0 = "thing other";
print "$str0\n";
my ($sane) = $str0 =~ /(\S+)(?: other)/;
print "$sane \n";

foreach my $str(("\"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"
            )) {

   print "$str\n";
   my ($one, $two) = $str =~/"([^"]*)" (\d+)/;
   print "[$one] [$two]\n";
}

-- 
To unsubscribe, e-mail: beginners-unsubscr...@perl.org
For additional commands, e-mail: beginners-h...@perl.org
http://learn.perl.org/


Reply via email to