use strict;
my $str = 'select * from table4;
select * from table4,table5;
select table4.id from table4,table5;
select table4.id from table4,table5 where table4.id=table5.id;
select * from table4,table5 where table4.id=table5.id;
select * from table4,table5 where table4.id=table5.id and table4.id => 1 ;
select table4.id,table5.name from table4,table5 where table4.id=table5.id and table4.id>1 ;
select table4.id from table4,table5 where table4.id=table5.id like %ll%;
select table4.id from table4,table5 where table4.id=table5.id limit 1,10;
select table4.id from table4,table5 limit 1,10;
select table4.id from table4,table5 limit 1 ;
select table4.id from table4,table5 where id <> 1 limit 1 ;
select count(*) from table4,table5 where id <> 1 limit 1 ;
select count(*) from table4,table5 where id <> 1 having dd group by dd ;
select count(*) , max(table4.id) from table4,table5 where id <> 1 having dd group by dd ;
select * from tab1 left join tab2 on tab1.size = tab2.size where tab2.name = AAA;
select * from tab1 left join tab2 on tab1.size = tab2.size , right join tab2 on tab1.size = tab2.size where tab2.name = AAA and dd = dd;
select count(*) , max(table4.id) from table4,table5 left join tab2 on tab1.size = tab2.size , right join tab2 on tab1.size = tab2.size where id <> 1 having dd group by dd ;
';
my $regex = qr/select\s+(\*|((\w+(\.\w+)?)+(\s?,\s?\w+(\.\w+)?)*)|((\w+\([^\s]|(\w+\.\w+)?\))(\s+\,\s+)?)+)\s+from\s+(\w+(\s?,\s?\w+)*\;?)(\s+((\w+\s+join)\s+(\w+(\.\w)?\s+on\s+(\w+(\.\w+)?\s+=\s+\w+(\.\w+)?)?)(\s+,\s+)?)+)?(\s+((limit\s+(\w+)?\s?(\,\w+\;)?)|((where)?\s+?([^\;]+\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