solo - Regex para analizar los parámetros de SQL
salto de linea expresion regular oracle (2)
Esto es complicado porque los parámetros también pueden ocurrir dentro de las cadenas entre comillas.
SELECT * FROM authors WHERE name = @name_param
AND string = ''don/'t use @name_param'';
¿Cómo sabría la expresión regular usar el primer @name_param
pero no el segundo?
Es un problema que se puede resolver, pero no es práctico hacerlo en una sola expresión regular. Tuve que manejar esto en Zend_Db, y lo que hice fue eliminar primero todas las cadenas entre comillas y los identificadores delimitados, y luego puedes usar expresiones regulares en el resto.
Puede ver el código aquí: http://framework.zend.com/code/browse/~raw,r=8064/Zend_Framework/trunk/library/Zend/Db/Statement.php
Ver funciones _stripQuoted()
y _parseParameters()
.
Si tengo una consulta como SELECT * from authors where name = @name_param
, ¿hay una expresión regular para analizar los nombres de los parámetros (específicamente el "nombre_parámetro")?
Gracias
Dado que no tiene cadenas de caracteres ni comentarios con parámetros en ellos, la expresión regular requerida sería bastante trivial:
@([_a-zA-Z]+) /* match group 1 contains the name only */
Voy con la recomendación de Bill Karwin de ser cauteloso, sabiendo que el enfoque ingenuo tiene sus trampas. Pero si evalúa los datos que maneja, esta expresión regular sería todo lo que necesita.