On Fri, Jan 23, 2004 at 12:01:13AM -0500, [EMAIL PROTECTED] ([EMAIL PROTECTED]) wrote:
> This newbie needs help with a regex. Here's what the data from a text
> file looks like. There's no delimiter and the fields aren't evenly spaced
> apart.
>
> apples San Antonio Fruit
> oranges Sacramento Fruit
> pineapples Honolulu Fruit
> lemons Corona del Rey Fruit
>
> Basically, I want to put the city names into an array. The first field,
> the fruit name, is always one word with no spaces.
>
> So, I would guess that the regex needs to grab everything after the first
> word and before the beginning of Fruit. Then strip out all the spaces.
>
> Or grab the beginning of the second word until the beginning of Fruit.
> Then strip out the spaces after the city name.
>
> Anyone know how to do that ?
I'm not that experienced with Perl but here is my stab at it.
#!/usr/bin/perl
use warnings;
use strict;
while (<DATA>) {
if ($_ =~ /^\w+\s+(.+)\s+F\w+$/) {
push (my @array, $1);
print "@array\n";
}
}
__DATA__
apples San Antonio Fruit
oranges Sacramento Fruit
pineapples Honolulu Fruit
lemons Corona del Rey Fruit
__END__
Not the greatest regex but it works. I'm sure you will get better
solutions.
/^ = Beginning of line
\w+ = one or more word characters
\s+ = one or more white spaces
(.+) = any character one or more times grouped by (), contains "city"
\s+F = white space up to "F"
\w+$/ = one or more word characters up to end of line.
push loads @array with "$1" which snags what is in (.+) from the regex.
hth,
Kent
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>