Título: Expresión regular en MySQL para buscar y sustituir Publicado por: jdomgo3 en 25 Enero 2014, 19:58 pm Saludos, llevo un rato buscando la manera de hacer una búsqueda de una cadena con caracteres especiales, como por ejemplo, corchetes ([]) y dos puntos(:) en una tabla. Concretamente necesito buscar la siguiente cadena:
Código
He de decir que la parte "1234abcd" puede variar, es alfanumérica y rándom, en cambio "cadena1" es siempre igual. Por ejemplo: Código
La query que estoy intentando es: Código
Pero no me funciona. La segunda parte de lo que necesito hacer es sustituir cualquier coincidencia de [cadena1:*] por [cadena2], así, solo "[cadena2]", sin dos puntos ni nada mas, entre corchetes. ¿Cómo podría hacer esto? Un saludo y gracias de antemano por la ayuda. Título: Re: Expresión regular en MySQL para buscar y sustituir Publicado por: engel lex en 25 Enero 2014, 20:23 pm si haces...
Código: [cadena1:1234abdc] el buscara todo lo que tenga por lo menos 1 de los caracteres expresados entre los corchetes... si quieres que "cadena:" sea la parte fija y luego algo variable seria Código: cadena\:[a-zA-Z0-9]* el buscará la frase "cadena:" (por seguridad procura colocarle \ a todos los simbolos que sean fijos, para que el regex sepa que no son codigos) seguido de uno o mas terminos que contengan simbolos de la "a" la "z", de la "A" a la "Z" o numeros del 0 al 9... recomendacion... aqui tienes una hoja de codigos de regex... http://www.cheatography.com/davechild/cheat-sheets/regular-expressions/ (http://www.cheatography.com/davechild/cheat-sheets/regular-expressions/) y aqui para que los pruebes en vivo... http://regexpal.com/ (http://regexpal.com/) Título: Re: Expresión regular en MySQL para buscar y sustituir Publicado por: jdomgo3 en 25 Enero 2014, 23:09 pm Cojonudo, me ha funcionado, lo que no se muy bien cómo hacer es la sustitución en todos los casos que encuentre cadena1:[a-zA-Z0-9]* por cadena2, a sin mas, sin dos puntos ni nada mas a su derecha.
He probado con: Código
pero no me funciona :-\ Título: Re: Expresión regular en MySQL para buscar y sustituir Publicado por: engel lex en 25 Enero 2014, 23:15 pm Lee la hojas de expresiones rwgulares eso es un poco mas complicado... no es mas facil que lo hagas en PHP o tienes que hacerlo en mysql puro?
Título: Re: Expresión regular en MySQL para buscar y sustituir Publicado por: EFEX en 25 Enero 2014, 23:43 pm La function replace no soporta expresiones regulares y creo que no existe funcion mysql que lo soporte.
Título: Re: Expresión regular en MySQL para buscar y sustituir Publicado por: jdomgo3 en 25 Enero 2014, 23:47 pm Lee la hojas de expresiones rwgulares eso es un poco mas complicado... no es mas facil que lo hagas en PHP o tienes que hacerlo en mysql puro? Es en MySQL puro, no es nada PHP. Gracias de todos modos, seguiré mirando a ver si hay algo. Y si no un export, un awk o sed de toda la vida y un import, pero esa será mi última opción. Título: Re: Expresión regular en MySQL para buscar y sustituir Publicado por: jdomgo3 en 25 Enero 2014, 23:47 pm La function replace no soporta expresiones regulares y creo que no existe funcion mysql que lo soporte. Gracias EFEX, seguiré mirando a ver si encuentro alguna cosa que me sirva. Título: Re: Expresión regular en MySQL para buscar y sustituir Publicado por: #!drvy en 26 Enero 2014, 00:06 am https://github.com/hholzgra/mysql-udf-regexp
Es un modulo es pero es lo que hay para lo que buscas. Saludos Título: Re: Expresión regular en MySQL para buscar y sustituir Publicado por: EFEX en 26 Enero 2014, 00:13 am Tambien http://techras.wordpress.com/2011/06/02/regex-replace-for-mysql/
Nunca instale un udf, pero es mas recomendable lo que propuso drvy. Título: Re: Expresión regular en MySQL para buscar y sustituir Publicado por: jdomgo3 en 26 Enero 2014, 10:53 am Drvy y EFEX, muchas gracia a los dos, llamadme cateto pero... no se muy bien cómo adaptar esta función y su invocación a mis datos, arrgggg. Mi tabla se llama prueba, la columna se llama col1 y he de cambiar el string hola:98yef8y por el string adios:
Código
No me está funcionando, no creo que lo esté haciendo bien, pero es que no controlo muy bien esto de las funciones en SQL. |