in reply to Matching a range of lines using a regex (the .. and ... operators)

Here is a small change to concat the next line to the current if the current has <B in it (you may even want to change this to $_ .= <> if /</; just to be sure). Should solve your prob and avoids slurping in the entire file at once. You are also dropping the text on the bluebird line preceding the <bluebird> tag, not sure if this is what you want.

updated

updated so it actualy reads its data from its data block!

Regards,
R.

#!/usr/local/bin/perl -w use strict; LINE: while ( <DATA> ) { $_ .= <DATA> if /<B/; next LINE if (m/\.{4}<B.*ird>/s .. /(\+\=\+)$/); print; } __END__ (Example 1) This is Example 1 This is some text....<Bluebird>.. MBAAAEgAAAQAB blaah,blaah =+=+=+=+=+=+=+=+=+=+=+ (Example 2) but sometimes it looks like this: This is some text....<B luebird>..MBAAAEgAAAQAoBA AAQKAREDSCETRTBDFS blaah,blaah =+=+=+=+=+=+=+=+=+=+=+

update

I fixed this for a case where a line ends in something begining in <B other than a part of <Bluebird> and added another test case in the data. Also note the pattern match given by the OP matches <Blackbird> as well. Anyone know a more ellegant regexp to do /<(B|Bl|Blu|Blue|Blueb|Bluebi|Bluebird)$/ ?
#!/usr/local/bin/perl -w use strict; LINE: while ( <DATA> ) { $_ .= <DATA> while /<(B|Bl|Blu|Blue|Blueb|Bluebi|Bluebird)$/; next LINE if (m/\.{4}<B.*ird>/s .. /(\+\=\+)$/); print; } __END__ (Example 1) This is Example 1 This is some text....<Bluebird>.. MBAAAEgAAAQAB blaah,blaah =+=+=+=+=+=+=+=+=+=+=+ (Example 2) but sometimes it looks like this: This is some text....<B luebird>..MBAAAEgAAAQAoBA AAQKAREDSCETRTBDFS blaah,blaah =+=+=+=+=+=+=+=+=+=+=+ (Example 3) This is designed to break it ha ha this will make trouble<B lackCrow> This is some text....<B luebird>..MBAAAEgAAAQAoBA AAQKAREDSCETRTBDFS blaah,blaah =+=+=+=+=+=+=+=+=+=+=+