validar solo salto regulares regular regexp_substr regexp numeros linea funcion expresiones expresion examples ejemplos sql regex

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.