Hi Chris,

On Fri, May 25, 2012 at 11:53 PM, <pa...@fsmail.net> wrote:

>
> May you try this matching?
>
> while(<DATA>) {
>    next unless /^(\S+\s+)(\S+\s+)(\S+\s+).*\"(.*?)\"/;
>    print "$1 $2 $3 $4\n";
> }
>
> HTH.
>
> ========================================
>  Message Received: May 25 2012, 09:52 PM
>  From: "Christopher Gray" <christopher.g...@talktalk.net>
>  To: beginners@perl.org
>  Cc:
>  Subject: Help required to extract multiple text fields from a text string
>
>  Good day,
>
>  I have a text file containing records.  While I can extract single
>  sub-strings, I cannot extract multiple sub-strings.
>
>  The records are of multiple types - only about a third of which have the
>  data I need.
>
>  An example of a "good" record is
>
>  Abc1234 STATUS   open  DESCRIPTION "A basket of melons" :: { fruittype 1}
>
>  I'm trying to extract the first (Abc1234), second (open), third (A basket
> of
>  melons) and fourth (1) strings.
>
>  I can extract each of them separately - but not together.
>
>  So - for example:
>
>       while (<FILE>) {
>           chomp;
>             next if !/\{\s+fruittype\s+(\d+)\s+}/;
>             my $Temp =$1;
>       }
>
>  Extracts the fruittype.  However, when I try and have multiple extracts:
>
>   ...
>            next if !/\STATUS\s+(\w+)\s+\{\s+fruittype\s+(\d+)\s+}/;
>   ...
>  It fails.
>
>  What have I done wrong?
>
>  Chris
>
>
 You didn't show the type of record that is incorrect, however, from your
code, I suppose a corrcet record would contain fruittype.

In the single match, your regex matches, but doesn't when trying to match
several.

while(<FILE>) {
   next unless
m/(.+?)\s+?.+?\s.+?(.+?)\s+?.+?\"(.+?)\".+?\{\s+fruittype\s+(.+?)\}/;
   print "$1 $2 $3 $4\n"; # print Abc1234  open A basket of melons 1
}

-- tim

Reply via email to