Autor
|
Tema: Expresión regular en MySQL para buscar y sustituir (Leído 7,173 veces)
|
jdomgo3
Desconectado
Mensajes: 22
|
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: [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: [cadena1:98u34r7y]
La query que estoy intentando es: 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
|
si haces... 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 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
Mensajes: 22
|
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: UPDATE `tabla` SET `campo` = REPLACE(`campo`, cadena1\:[a-zA-Z0-9]*, cadena2);
pero no me funciona
|
|
|
En línea
|
|
|
|
engel lex
|
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
Mensajes: 1.171
"Dinero Facil"
|
La function replace no soporta expresiones regulares y creo que no existe funcion mysql que lo soporte.
|
|
|
En línea
|
|
|
|
jdomgo3
Desconectado
Mensajes: 22
|
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
Mensajes: 22
|
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
|
|
|
|
|
|
jdomgo3
Desconectado
Mensajes: 22
|
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: DELIMITER $$ CREATE FUNCTION `regex_replace`(pattern VARCHAR(1000),replacement VARCHAR(1000),original VARCHAR(1000)) RETURNS VARCHAR(1000) DETERMINISTIC BEGIN DECLARE temp VARCHAR(1000); DECLARE ch VARCHAR(1); DECLARE i INT; SET i = 1; SET temp = ''; IF original REGEXP pattern THEN loop_label: LOOP IF i>CHAR_LENGTH(original) THEN LEAVE loop_label; END IF; SET ch = SUBSTRING(original,i,1); IF NOT ch REGEXP pattern THEN SET temp = CONCAT(temp,ch); ELSE SET temp = CONCAT(temp,replacement); END IF; SET i=i+1; END LOOP; ELSE SET temp = original; END IF; RETURN temp; END$$ DELIMITER ; 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
|
|
|
|
|
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,747
|
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
|
42,457
|
11 Diciembre 2011, 01:14 am
por vvcepheus7
|
|
|
Expresión regular en javascript para quitar tags
Desarrollo Web
|
astinx
|
3
|
4,951
|
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,354
|
15 Marzo 2013, 07:41 am
por cyberserver
|
|
|
Buscar cadena usando expresión regular. Python
Scripting
|
OssoH
|
3
|
2,544
|
25 Octubre 2022, 15:36 pm
por OssoH
|
|