Que tal amigos.  Estoy necesitando ayuda en el Parse de expresiones SQL. Estoy utilizando expresiones regulares.  El proyecto en si, no es necesariamente en PHP, creo que posteriormente lo migraremos a otro lenguaje, aunque no tengo el dato actual.  Mi duda más bien viene encaminada a lo siguiente:
 
Como puedo parsear una instruccion SQL como esta:
 
UPDATE table1 SET field1 = value1, field2 = value2 WHERE field3 = value3
 
estoy usando la función EREG que me debería dividir la  cadena en:
 
Array
(
    [0] => UPDATE table1 SET field1 = value1, field2 = value2 WHERE field3 = value3 
    [1] => table1
    [2] => field1 = value1, field2 = value2 
    [3] => WHERE field3 = value3
)
 
Pero me devuelve:
 
Array
(
    [0] => UPDATE table1 SET field1 = value1, field2 = value2 WHERE field3 = value3 
    [1] => table1
    [2] => field1 = value1, field2 = value2 WHERE field3 = value3
    [3] => 
)
 
La expresión regular que estoy usando es:
 
ereg("UPDATE ([a-zA-Z0-9]+) SET ([a-zA-Z0-9 =,]+) (WHERE [a-zA-Z0-9 =]+)?", $sql, $matches);
 
Veo que me esta incluyendo la parte del WHERE por que tengo dentro del segundo paréntesis el A-Z. Creo que la solución sería indicarle que acepte [A-Z] pero que ignore hasta que encuentre un WHERE.  La pregunta final sería: como hago eso?
 
Gracias de antemano. 
   
 
 ) en la parte de SET:
) en la parte de SET:
