Phoenix.pm: Regex question
Scott Walters
phaedrus at contactdesigns.com
Fri Feb 2 12:56:27 CST 2001
Doug,
|DailyNAV|Class C|||nav <-- output of your version
||DailyNAV| |Class C|| ||nav <-- output of same regex used in split() on same string
Regex can match 0 character things, like with split //, $str;... but looking
at the regex, nothing in there would match something 0 chracters long, so
I don't know =)
Hmm. Tried a few other regexes that also "should work" and had no luck. Only
thing I can think of is work around the mystery/problem:
my @tokens = grep { $_ ? 1 : 0 } $string =~ /"([^"]+)"|(\S+)/g;
-scott
On Fri, 2 Feb 2001, Doug Miles wrote:
> This is probably something obvious, but I don't have my regex book with
> me, and can't seem to figure it out. I'm trying to parse space
> delimited information, somewhat like the UNIX command line. Whitespace
> delimits parameters, but parameters can containg whitespace if
> surrounded by quotes. Here's the code:
>
> #!/usr/bin/perl
>
> my $string = qq(DailyNAV "Class C" nav);
>
> my @tokens = $string =~ /(\S+)/g;
> my @tokens = $string =~ /"([^"]+)"/g;
> my @tokens = $string =~ /"([^"]+)"|(\S+)/g;
> print join('|', @tokens) . "\n";
>
> here is the output:
>
> DailyNAV|"Class|C"|nav
> Class C
> |DailyNAV|Class C|||nav
>
> The first two regexes do what I expect. When I combine them in the
> third, I get extra "null matches". Any ideas as to what I'm doing
> wrong?
>
> --
> - Doug
>
> Encrypted with ROT-26 - all attempts to decrypt are illegal under the
> DMCA!
>
More information about the Phoenix-pm
mailing list