Jochen Daum wrote:
> Hi,
> 
> does anybody here know or has used a regular expression to tokenise a 
> Mysql query? What I'm looking at is getting the parts of the query in an 
> array of matches, i.e. the 'select ...' part, the 'from ...' part etc.
> 
> I got this one for now, but it has some shortfalls:
> 
> $found = preg_match 
> ('/^(\s?(SELECT|select)(.*?)\s(FROM|from)\s([^\s]+)(\s+((AS|as)\s+)?([^\s]+))?(\s+?(JOIN|join|LEFT|left|NATURAL|natural|RIGHT|right|INNER|inner).*?)?)(\s+(WHERE|where)\s(.+?))?(\s+(GROUP
>  
> BY|group by)\s.+?)?(\s+(ORDER BY|order 
> by)\s(.+?))?(\s+(LIMIT|limit)\s.*)?$/sm', $sql, $matches);

> Any other issues anyone can see? Any regex or libraries that you've used?

Writing a regex that'll handle all queries is going to be pretty much 
impossible - it's pretty much a case of deciding what subset you want to 
handle.

select * from (select a,b,(select c from d) from e inner join f)
union
select * from g
union
select * from h

Also, sElEcT is valid, and I've seen people use Select in production code.

-- 
Tim Oliver
Software Engineer

160 Cashel Street (Level 2)
PO Box 22 128  Christchurch  New Zealand
P +64 3 377 0007  F +64 3 377 6582
E [email protected]

www.e2media.co.nz


--~--~---------~--~----~------------~-------~--~----~
NZ PHP Users Group: http://groups.google.com/group/nzphpug
To post, send email to [email protected]
To unsubscribe, send email to
[email protected]
-~----------~----~----~----~------~----~------~--~---

Reply via email to