The .* lets your match cross over section boundaries.
$stayinsection acts just like .* but will not allow crossing over your section boundary of "\n\n"
Just a slightly advanced regex trick :)
#!/usr/bin/perl # http://perlmonks.org/?node_id=1159215 use strict; use warnings; my $stayinsection = qr/(?:(?!\n\n).)*/s; $_ = do { local $/; <DATA> }; print "<$1> <$2>\n" while /First Name:\s+([A-Za-z0-9 _ ( )]*)${stayinsection}Last Name:\s+([A- +Za-z0-9 _ ( )]*)${stayinsection}Location: Central USA/g; __DATA__ First Name: John Last Name: Doe Occupation: Network Administrator Location: West Coast First Name: Jane Last Name: Doe Occupation: Human Resources Location: East Coast First Name: James Last Name: Doe Occupation: Technical Support Engineer Location: Central USA First Name: Jane Last Name: Doe Occupation: Human Resources Location: East Coast First Name: Another Last Name: Doe Occupation: Technical Support Engineer Location: Central USA
In reply to Re: Storing String from Line Before Regex Match
by tybalt89
in thread Storing String from Line Before Regex Match
by Nico
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |