Estaba escribiendo algunas pruebas de Unidad la semana pasada para un fragmento de código que generó algunas sentencias de SQL.Expresión regular para coincidir con la sintaxis SQL común?
Estaba tratando de encontrar una expresión regular que coincida con la sintaxis SELECT, INSERT y UPDATE para poder verificar que mis métodos generaran SQL válido, y después de 3-4 horas de buscar y jugar con varios editores de expresiones regulares me rendí .
Logré obtener coincidencias parciales, pero debido a que una sección entre comillas puede contener cualquier carácter, se expande rápidamente para que coincida con la totalidad de la declaración.
Me agradecería cualquier ayuda, no soy muy bueno con las expresiones regulares, pero me gustaría aprender más sobre ellas.
Por cierto, es C# regex lo que estoy buscando.
Aclaración
no quiero tener acceso a una base de datos ya que esto es parte de una prueba de unidad y no wa no tener que mantener una base de datos para probar mi código. que puede vivir más tiempo que el proyecto.
De acuerdo. Aquí se necesita algún otro enfoque además de regexp. No hay forma de hacer coincidir la sintaxis legal para una instrucción select: http://download.oracle.com/docs/cd/B28359_01/server.111/b28286/statements_10002.htm#SQLRF01702 –
De acuerdo. En realidad, necesitas un analizador SQL. Aquí hay un artículo que muestra cómo hacer una verificación de sintaxis de SQL fuera de línea específica del proveedor con la ayuda del analizador sql general: http://www.dpriver.com/blog/list-of-demos-illustrate-how-to-use-general -sql-parser/vendor-specific-offline-sql-syntax-check/ –
Cualquier gramática libre de contexto se puede analizar mediante expresiones regulares modernas. Las expresiones regulares ya no están restringidas al análisis de idiomas regulares. Si esto fuera cierto, el lenguaje '{a^nb^n}' no sería analizable, sin embargo, esto puede ser analizado por la expresión regular '/^(a (\ 1)? B) $ /'. Consulte https://nikic.github.io/2012/06/15/The-true-power-of-regular-expressions.html para obtener más información. – Jack