in reply to Storing String from Line Before Regex Match
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
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Storing String from Line Before Regex Match
by AnomalousMonk (Archbishop) on Apr 01, 2017 at 23:02 UTC | |
by tybalt89 (Monsignor) on Apr 02, 2017 at 01:22 UTC |