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

    I notice the character class  [A-Za-z0-9 _ ( )] with two extra space characters. Just out of idle curiosity, is this done to enhance visual presentation/readability, or for some other reason?

    Update: Also: What is the purpose of the  $searchfor string?


    Give a man a fish:  <%-{-{-{-<

      I just left the OP's character class code as it was. I don't know why he had multiple spaces in there.

      I had tried several different solutions before deciding to just modify the OP's regex. The $searchfor string is left over from an early test version, it should be removed. In fact, I think I'll go do that now. Thanks for the catch.