use strict;
my $str = 'data foo (drop = DISCOUNT price RENAME = ( PROV_NM1= PROV_NM PROV_ST_NM1 = PROV_ST_NM) where = ( product = \'whizmo\' and product < 10 )) bar( drop= DISCOUNT price rename= ( startDate = beginDate ) );
Data Data_asof&YrMon.;
data halfYear( drop= DISCOUNT price
rename= ( startDate = beginDate ) where=(product = \'abc\' and price > 10) );
data apply_adj_v2 non_adjusted incorrect_acct;
data apply_adj_v2;
DATA INPDTL1(RENAME=(PROV_NM1=PROV_NM PROV_ST_NM1=PROV_ST_NM));
DATA REIMB_MTHD_CLM2;
';
my $regex = qr/(?i)(data)\s+((\w+)(?=(\s*))(?:\4\w+)+)?\s*(\(((.|\n)*?)\);)?/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