SQL regex
Posted: Tue Jun 30, 2009 9:33 pm
I'm trying to parse a basic SQL statement.
ie:
SELECT a FROM b
SELECT a,aa,aaa FROM b
SELECT a FROM b WHERE c<>d
SELECT a,aa,aaa FROM b WHERE c==d
Here is what I came up with. (I think) It does the job, but it sure does look ugly.
Any tips? Would it be smarter to just do something like and then validate each part individually?
ie:
SELECT a FROM b
SELECT a,aa,aaa FROM b
SELECT a FROM b WHERE c<>d
SELECT a,aa,aaa FROM b WHERE c==d
Here is what I came up with. (I think) It does the job, but it sure does look ugly.
Code: Select all
$pattern = '#^SELECT ([a-z]+(?:,[a-z]+)*)' //match SELECT a or SELECT a,b but not SELECT a,,,
.' FROM ([a-z0-9]+)'
.'(?:\sWHERE\s([a-z0-9_]+)\s?(==?|!=|<>|<=?|>=?)\s?([a-z0-9_]+))?$#is';
Code: Select all
$pattern = '#^SELECT (.+) FROM (.+?)(?: WHERE (.+))?$#is';