use strict;
my $str = 'customtracking=\\"[{"name":"utm_source","value":"Loopify"},{"name":"utm_campaign","value":""},{"name":"utm_medium","value":"Page"},{"name":"utm_content","value":"<variable contenteditable=\\\\"false\\\\" name=\\\\"link type\\\\" source=\\\\"campaign.linkType\\\\" placeholder=\\\\"\\\\" date-locale=\\\\"\\\\" date-format=\\\\"\\\\">link type</variable>"}]\\" class=\\"loopify-link\\">aliquam</a>, lobortis ante eu, consectetur nulla. Sed vitae posuere purus. Vivamus pretium et ipsum vel pretium. Nunc elementum tempus magna id iaculis.","button1":"Google","button2":"Read more"},"link1":{"type":"website","url":"https://www.google.com","uuid":"1a61717c-a686-4683-450c-5fa775b74b6f","target":"_blank","title":"","customTracking":[{"name":"utm_source","value":"Loopify"},{"name":"utm_campaign","value":"<variable contenteditable=\\"false\\" name=\\"campaign name\\" source=\\"campaign.campaignName\\" placeholder=\\"\\" date-locale=\\"\\" date-format=\\"\\">campaign name</variable>"},{"name":"utm_medium","value":"Page"},{"name":"utm_content","value":"<variable contenteditable=\\"false\\" name=\\"link type\\" source=\\"campaign.linkType\\" placeholder=\\"\\" date-locale=\\"\\" date-format=\\"\\">link type</variable>"}]}';
my $regex = qr/(?<variable><variable.+?source=[\\]*"(?<source>.*?)[\\]*".*?>.*?<\/variable>)/p;
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