use strict;
my $str = '<?xml version="1.0" encoding="utf-8"?>
<ns1:StudySQL_response xmlns:ns1="urn:global:cs:jdbc:study">
<Statement_response>
<row>
<XMLTYPE.GETSTRINGVAL(MESSAGE)><study studypid="200">
<studyname>&quot;Immume Treat Phase3&quot;</studyname>
<statusCD>ongoing</statusCD>
<clinicalphase>III</clinicalphase>
<primaryIndication>for lung cancer</primaryIndication>
<startDate>2010-Jun-28</startDate>
</study>
</XMLTYPE.GETSTRINGVAL(MESSAGE)>
</row>
<row>
<XMLTYPE.GETSTRINGVAL(MESSAGE)><study studypid="201">
<studyname>&quot;ABPM Study&quot;</studyname>
<statusCD>on hold</statusCD>
<clinicalphase>III</clinicalphase>
<primaryIndication>skin cancel</primaryIndication>
<startDate>2015-Mar-08</startDate>
</study>
</XMLTYPE.GETSTRINGVAL(MESSAGE)>
</row>
</Statement_response>
</ns1:StudySQL_response>
';
my $regex = qr%<\?xml(.+?)\?>%p;
if ( $str =~ /$regex/ ) {
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