elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web (Moderador: #!drvy)
| | |-+  Expresión regular en MySQL para buscar y sustituir
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Expresión regular en MySQL para buscar y sustituir  (Leído 6,699 veces)
jdomgo3

Desconectado Desconectado

Mensajes: 22


Ver Perfil
Expresión regular en MySQL para buscar y sustituir
« 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
  1. [cadena1:1234abdc]

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
  1. [cadena1:98u34r7y]

La query que estoy intentando es:

Código
  1. SELECT * FROM `tabla` WHERE columna REGEXP '\\[cadena1:*\\]';

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.


En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Expresión regular en MySQL para buscar y sustituir
« Respuesta #1 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/

y aqui para que los pruebes en vivo...
http://regexpal.com/



En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
jdomgo3

Desconectado Desconectado

Mensajes: 22


Ver Perfil
Re: Expresión regular en MySQL para buscar y sustituir
« Respuesta #2 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
  1. UPDATE `tabla` SET `campo` = REPLACE(`campo`, cadena1\:[a-zA-Z0-9]*, cadena2);

pero no me funciona  :-\
En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Expresión regular en MySQL para buscar y sustituir
« Respuesta #3 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?
En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
EFEX


Desconectado Desconectado

Mensajes: 1.171


"Dinero Facil"


Ver Perfil WWW
Re: Expresión regular en MySQL para buscar y sustituir
« Respuesta #4 en: 25 Enero 2014, 23:43 pm »

La function replace no soporta expresiones regulares y creo que no existe funcion mysql que lo soporte.
En línea

jdomgo3

Desconectado Desconectado

Mensajes: 22


Ver Perfil
Re: Expresión regular en MySQL para buscar y sustituir
« Respuesta #5 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.
En línea

jdomgo3

Desconectado Desconectado

Mensajes: 22


Ver Perfil
Re: Expresión regular en MySQL para buscar y sustituir
« Respuesta #6 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.
En línea

#!drvy
Moderador
***
Desconectado Desconectado

Mensajes: 5.850



Ver Perfil WWW
Re: Expresión regular en MySQL para buscar y sustituir
« Respuesta #7 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
En línea

EFEX


Desconectado Desconectado

Mensajes: 1.171


"Dinero Facil"


Ver Perfil WWW
Re: Expresión regular en MySQL para buscar y sustituir
« Respuesta #8 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.
En línea

jdomgo3

Desconectado Desconectado

Mensajes: 22


Ver Perfil
Re: Expresión regular en MySQL para buscar y sustituir
« Respuesta #9 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
  1. DELIMITER $$
  2. CREATE FUNCTION  `regex_replace`(pattern VARCHAR(1000),replacement VARCHAR(1000),original VARCHAR(1000))
  3.  
  4. RETURNS VARCHAR(1000)
  5. DETERMINISTIC
  6. BEGIN
  7. DECLARE temp VARCHAR(1000);
  8. DECLARE ch VARCHAR(1);
  9. DECLARE i INT;
  10. SET i = 1;
  11. SET temp = '';
  12. IF original REGEXP pattern THEN
  13.  loop_label: LOOP
  14.   IF i>CHAR_LENGTH(original) THEN
  15.    LEAVE loop_label;  
  16.   END IF;
  17.   SET ch = SUBSTRING(original,i,1);
  18.   IF NOT ch REGEXP pattern THEN
  19.    SET temp = CONCAT(temp,ch);
  20.   ELSE
  21.    SET temp = CONCAT(temp,replacement);
  22.   END IF;
  23.   SET i=i+1;
  24.  END LOOP;
  25. ELSE
  26.  SET temp = original;
  27. END IF;
  28. RETURN temp;
  29. END$$
  30. DELIMITER ;
  31.  
  32. SELECT * FROM  `prueba` WHERE col1 regex_replace('hola\:[a-zA-Z0-9\-]*','','adios');

No me está funcionando, no creo que lo esté haciendo bien, pero es que no controlo muy bien esto de las funciones en SQL.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Expresion regular para filtrar una búsqueda « 1 2 »
Programación Visual Basic
LeandroA 12 6,140 Último mensaje 30 Agosto 2010, 09:02 am
por Psyke1
Expresión regular para buscar y reemplazar en notepad++ « 1 2 3 »
Programación General
vvcepheus7 21 41,104 Último mensaje 11 Diciembre 2011, 01:14 am
por vvcepheus7
Expresión regular en javascript para quitar tags
Desarrollo Web
astinx 3 4,663 Último mensaje 24 Julio 2012, 07:06 am
por astinx
Expresión regular para buscar palabras con mayúsculas,minúsculas y con Acentos
Programación General
cyberserver 1 3,111 Último mensaje 15 Marzo 2013, 07:41 am
por cyberserver
Buscar cadena usando expresión regular. Python
Scripting
OssoH 3 2,199 Último mensaje 25 Octubre 2022, 15:36 pm
por OssoH
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines