Sid
Sid

Reputation: 108

Need help on Regular expression to extract sql sub query

i am new to regx...i want to get the subquery from given query using regular expression.

For example i have query like following

Select * from (
   select * from Table_A where ID = 90 
   UNION 
   select * from Table_B where ID = 90
)  as SUBQUERY left join TABL_ABC abc ON (abc.id = SUBQUERY.id)

now i want my regular expression to match following lines only:

select * from Table_A where ID = 90 
   UNION 
   select * from Table_B where ID = 90

Please help me, Thank you in advance...

Upvotes: 1

Views: 2466

Answers (2)

Tim
Tim

Reputation: 8606

<?php
$sql = 'Select * from ( select * from Table_A where ID = 90 UNION select * from Table_B where ID = 90 ) as SUBQUERY left join TABL_ABC abc ON (abc.id = SUBQUERY.id)';

if( preg_match('/\(\s*(select.+)\) as /iU', $sql, $matched ) ){
    $subquery = trim( $matched[1] );
    var_dump( $subquery );   
}

Upvotes: 1

Olaf Dietsche
Olaf Dietsche

Reputation: 74018

If it is a simple subquery without additional braces, you can just use this regexp

/\(\s*(select[^)]+)\)/i

Upvotes: 2

Related Questions