Más de expresiones regulares


#1

Buenas, a ver si me entero de cómo hacer cosas con expresiones
regulares,
porque no me aclaro. Llevo un par de horas con el método prueba-error
para
sacar algo y no hay manera.

El es que lo que quiero es sacar de una sentencia sql, las columnas a
las
que se hace consulta.

Y estos son los 3 posibles casos:

select a.login, a.nombre from usuarios
select a.login as acceso, a.nombre as el_nombre from usuarios
select a.login acceso, a.nombre el_nombre from usuarios

Sé que hacerlo es algo tan fácil como crear una expresión regular que
haga
lo siguiente:
-corte lo que hay entre el select y el from,
-del resultado sacar lo que está separado por las comas,
-y de cada uno de los elementos resultantes, sacar lo que hay más a la
derecha, separado por espacio o punto…

Yo lo he hecho a lo bruto, pero me molesta tener que codificar tanto
pudiendo hacerlo mucho más fácil.
Me queda así:

query = "select a.login acceso, a.nombre as el_nombre, a.password 

from
usuarios"
aux = query.downcase.split(/from/)[0]
array_aux = aux.gsub(/select/,"").split(",")
retorno = []
array_aux.each do |cadena|
aux = cadena.strip
for aux2 in aux.split(" “)
aux2
end
aux2 = aux2.split(”.")[1] if aux2=~/./
retorno << aux2
end
retorno


#2

El Jul 31, 2007, a las 5:43 PM, Luis V.
escribió:

select a.login as acceso, a.nombre as el_nombre from usuarios
select a.login acceso, a.nombre el_nombre from usuarios

Sé que hacerlo es algo tan fácil como crear una expresión regular
que haga lo siguiente:
-corte lo que hay entre el select y el from,
-del resultado sacar lo que está separado por las comas,
-y de cada uno de los elementos resultantes, sacar lo que hay más a
la derecha, separado por espacio o punto…

Podria ser algo asi:

query = “select a.login acceso, a.nombre as el_nombre, a.password
from usuarios”
query =~ /^select(.?)\bfrom\b/i
columns = $1.strip.split(/\s
,\s*/)
columns.map {|c| puts c.split(/[ .]/)[-1]}

En la regexp

/^select(.*?)\bfrom\b/i

aprovechamos el hecho de que “from” no puede ser nombre de columna o
alias por ser una palabra reservada.

– fxn


#3

Funciona estupendamente. Muchas gracias