use strict;
my $str = 'sponsor_type_trial_company = \'Sponsor\' AND
brief_title_trial LIKE \'%heme%\' AND brief_title_trial LIKE \'%basket%\'
outcome_trial_primary_outcome = \'Bladder Cancer\'
AND sponsor_type_trial_company = \'Sponsor\' AND
overall_status_trial IN (\'Recruiting\', \'Enrolling by invitation\') AND trial_status_trial = \'Open\' AND official_title_trial LIKE \'%Japan%\'
overall_status_trial IN (\'Recruiting\', \'Not yet recruiting\', \'Active, not recruiting\') AND biomarker_strategy_trial_biomarker = \'HER2 low\' AND indication_trial_indication = \'Breast Cancer\'
trial_phase_trial=\'Phase 3\' AND stage_trial_indication_stage=\'Stage IV\' AND outcome_acronym_trial_primary_outcome=\'PFS\'';
my $regex = qr/((\s*\b([a-zA-Z_]*)\b)\s*((\s*=\s*(('[\w\-_#@,.!@#$%^&*()\s]*')))|((\s+\bLIKE\b\s+('[\w\-_#@,.!@#$%^&*()\s]*')))|(((\s+\bIN\b\s+\('[\w\-_#@,.!@#$%^&*()\s]+'(, '[\w\-_#@,.!@#$%^&*()\s]+')*\)))))((\s*\b(AND|OR)\b\s*)(\s*\b([a-zA-Z_]*)\b)\s*((\s*=\s*(('[\w\-_#@,.!@#$%^&*()\s]*')))|((\s+\bLIKE\b\s+('[\w\-_#@,.!@#$%^&*()\s]*')))|(((\s+\bIN\b\s+\('[\w\-_#@,.!@#$%^&*()\s]+'(, '[\w\-_#@,.!@#$%^&*()\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