Thanks for the quick reply. Assuming I have nested start-stop. How can I get the lines from the first startPattern to the last stopPattern ?
Yossi -----Original Message----- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Yitzchak Scott-Thoennes Sent: Tuesday, March 25, 2008 12:34 PM To: Perl in Israel Subject: Re: [Israel.pm] how to find lines range (regex) On Tue, March 25, 2008 3:06 am, Yossi Itzkovich wrote: > Hi, > > > What's the best/simple way to find all lines between startPattern and > StopPattern: > > > @text= ( "ahfdj\n", > "ksjdf\n", > "startPattern\n", > "gjdhgf\n", > "kljsd\n", > "stopPattern\n", > "jsadflj\n"); > > > I would like to get a list of those 2 items in the middle It's easy to get the range *including* the start and stop elements, and then pull them out. @text= ( "ahfdj\n", "ksjdf\n", "startPattern\n", "gjdhgf\n", "kljsd\n", "stopPattern\n", "jsadflj\n"); @text_range = grep { /startPattern/ .. /stopPattern/ } @text; print for @text_range[1..($#text_range-1)]; # or pop(@text_range); unshift(@text_range); print for @text_range; It's kind of obscure doing it in one go: print for grep { (/startPattern/../stopPattern/)=~/(?:[2-9]|\d\d)\z/ } @text Both of those assume startPattern won't appear again after stopPattern. A more brute-force kind of way: @text_range = @text; # copy if original array shouldn't be modified while ((unshift(@text_range) // last) !~ /startPattern/) {} while ((pop(@text_range) // last) !~ /stopPattern) {} _______________________________________________ Perl mailing list [email protected] http://perl.org.il/mailman/listinfo/perl _______________________________________________ Perl mailing list [email protected] http://perl.org.il/mailman/listinfo/perl
