http://www.perlmonks.org?node_id=699265


in reply to Re^4: Regex problems using '|'
in thread Regex problems using '|'

If I understood your earlier reply correctly, the regex does match (with the alternation), but it doesn't match the way you want. That's a big difference, and what I tried to explain to you.
That's the behavior I want with regards to the rest of the records.

After looking at the updated data I think that you need two regexes for that:

use strict; use warnings; my $str = do { local $/; <DATA> }; if ($str =~ m/Remediation Report\n\n(.+?)\n/g){ print $1, $/; while ($str =~ m/\n\n(.*)\n/g){ print $1, $/; } } __DATA__ thread-index: AcjoCau17Ri90HMJR8qoukn2A1g7ng== MIME-Version: 1.0 # rest of data goes here

The output is:

Adobe Flash Player Multiple Vulnerabilities - April 2008 - IE Adobe Flash Player Multiple Vulnerabilities - April 2008 - Mozilla/Ope +ra Adobe Reader/Acrobat 8.1.2 and 7.1.0 Update - Acrobat 7.x

The trick is to use the /g-modifier on the first regex although it matches only once. That way pos $str will not be reset, and the next regex match starts where the previous left off.

Also note that ^ will anchor to the start of the string (not to the start of a line) unless the /m modifier is present.