On Wed, Jan 14, 2004 at 06:22:58PM -0700, Jose Malacara wrote: > Can someone explain to me how to do multiline matching? I am trying to extract three > consecutive lines from a datafile containing multiple records like this: > > Name: Bob > City: Austin > State: Texas > Address: 123 Whatever > Age: 46 > > Name: Jose > City: Denver > State: Colorado > Address: 118 Mystreet > Age: 28 > > > > This is what I have so far, but it doesn't seem to work: > > #!/usr/bin/perl -w > open FILE, "<file1" or die "Can't open file!\n"; > while (<FILE>){ > if ( /^Name: (.*)\nCity: (.*)\nState: (.*)/) { > print "Match found!\n"; # ideally, I want to print the the lines found > } > } > close FILE; > > But for some reason, it doesn't seem to like the (\n)'s in the regex. Any help would > be appreciated! > > This is what I would like to return: > > Name: Bob > City: Austin > State: Texas > > Name: Jose > City: Denver > State: Colorado
I'm sure others will have better solutions but this works - #!/usr/bin/perl use warnings; use strict; while (<DATA>) { print if /^Name:/; print if /^City:/; print "$_\n" if /^State:/; } __DATA__ Name: Bob City: Austin State: Texas Address: 123 Whatever Age: 46 Name: Jose City: Denver State: Colorado Address: 118 Mystreet Age: 28 hth, Kent -- "I am always doing that which I can not do, in order that I may learn how to do it." --Pablo Picasso -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] <http://learn.perl.org/> <http://learn.perl.org/first-response>