$re = '/(?i)(data)\s+((\w+)(?=(\s*))(?:\4\w+)+)?\s*(\(((.|\n)*?)\);)?/m';
$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;
';
preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
// Print the entire match result
var_dump($matches);
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 PHP, please visit: http://php.net/manual/en/ref.pcre.php