use strict;
my $str = '<!DOCTYPE html>
<html>
<head>
<meta http-equiv=\'x-ua-compatible\' content=\'IE=edge,chrome=1\' />
<meta name="robots" content="nofollow" />
<meta name="robots" content="noindex" />
<meta name="robots" content="noarchive" />
<meta http-equiv="Cache-Control" content="private, no-cache, no-store, must-revalidate, max-age=0" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="0" />
<meta http-equiv="Expires" content="Tue, 01 Jan 1980 1:00:00 GMT" />
<meta charset=\'UTF-8\' />
<title>BLANK - FILL WITH CLIENT TITLE</title>
<link href=\'css/bpdev.css\' rel=\'stylesheet\' type=\'text/css\' />
<script src=\'https://code.jquery.com/jquery-1.11.1.min.js\'></script>
<script>!window.jQuery && document.write(\'<script src="common/js/jquery/jquery-1.11.1.min.js"><\\/script>\');</script>
<link rel=\'shortcut icon\' href=\'images/favicon.ico\' type=\'image/x-icon\' />
<style id="antiClickjack">body{display:none !important;}</style>
</head>
<body id=\'userTools\'>
<div id=\'notificationContainer\' data-automation=\'notification_window\'></div>
<div id=\'overlay\' class=\'modalOverlay\' data-automation=\'modal_overlay\'></div>
<div id=\'dialog\' class=\'modal\' data-automation=\'modal_window\'></div>
<div id=\'container\'>
<div id=\'header\' data-automation=\'header\'></div>
<div id=\'loader\' data-automation=\'content_loader\'></div>
<div id=\'content\' data-automation=\'content_area\'></div>
</div>
<div id=\'copyFooter\' class=\'copyright\' data-automation=\'copyright_footer\'></div>
<script src=\'common/js/gateway.framework-min.js\' type=\'text/javascript\'></script>
<script src=\'common/js/gateway.app-min.js\' type=\'text/javascript\'></script>
<script type=\'text/javascript\'>
if (self === top) {
var antiClickjack = document.getElementById(\'antiClickjack\');
antiClickjack.parentNode.removeChild(antiClickjack);
} else {
top.location = self.location;
}
(function($) {
var preferences = {
logo : \'images/logo.png\',
logoWidth : 250,
logoHeight : 38,
logoAlt : \'\',
logoLink : \'\',
logoutURL : \'../../pkmslogout\'
};
Gateway.startGateway(preferences, true);
}(jQuery));
</script>
</body>
</html>';
my $regex = qr/(var preferences = {)[\s\S]*(};)/mp;
if ( $str =~ /$regex/g ) {
print "Whole match is ${^MATCH} and its start/end positions can be obtained via \$-[0] and \$+[0]\n";
# print "Capture Group 1 is $1 and its start/end positions can be obtained via \$-[1] and \$+[1]\n";
# print "Capture Group 2 is $2 ... and so on\n";
}
# ${^POSTMATCH} and ${^PREMATCH} are also available with the use of '/p'
# Named capture groups can be called via $+{name}
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Perl, please visit: http://perldoc.perl.org/perlre.html