PHP-Hispano.net Comunidad hispana de desarrollo web

Contacto | #php_para_torpes | Enlázanos | ¿Quiénes somos?

4289 usuarios Online (0)

Darse de alta en la web | Recuperar password   
Inicio / Foros / PHP / Expresiones regulares (sustituir dentro de comillas)

Expresiones regulares (sustituir dentro de comillas) [SOLUCIONADO]

8 respuestas 530 visitas Categoría PHP

Expresiones regulares (sustituir dentro de comillas)

Avatar de rajita
* * * * * * *

(Nivel 1 - 5 posts)

#0 Offline rajita Usuario 10 jun 10
Hola!!!!

Tengo una cadena y quiero usar una expresión regular para hacer un reemplazo en ella pero no me sale :(

La cadena pongamos que es tal que así:

hola don pepito;"hola;don";josé



Lo que quiero, es reemplazar los puntos y comas que hay dentro de las comillas dobles, pero por más vueltas que doy y pruebas que hago, no lo consigo.

Podeis echarme un cable??

Re: Expresiones regulares (sustituir dentro de comillas)

Avatar de alrik
* * * * * * *

(Nivel 2 - 149 posts)

#1 Offline alrik Usuario 11 jun 10
Seguro que hay una forma mucho mas optima puesto que no es que sea lo que mejor se me da las regexp pro yo lo que suelo hacer en los casos en los que no se como sacarlo. Es aislar con preg_split el cacho en el que luego quiero hacer las sustituciones. Y después reconstruir la cadena de nuevo con los cambios hechos. Ya se que es una solución un poco cutre pero a mi me funciona y en cuanto a recursos tampoco es para tanto (Depende claro del volumen a procesar).

Re: Expresiones regulares (sustituir dentro de comillas)

Avatar de rajita
* * * * * * *

(Nivel 1 - 5 posts)

#2 Offline rajita Usuario 11 jun 10
Hombre, no sé yo si en este caso hay algo más optimo que una expresión regular, eh?
He salido del paso partiendo la cadena y haciendo los arreglos en donde he considerado necesario, pero es que no creo que haya algo más optimo para un reemplazo así que una expresión regular.

Así que a falta de mejor respuesta... seguiré buscando.
Gracias, de todas maneras.

Re: Expresiones regulares (sustituir dentro de comillas)

Avatar de alrik
* * * * * * *

(Nivel 2 - 149 posts)

#3 Offline alrik Usuario 11 jun 10
(Mi solucion era la cutre) No si yo decía que con preg_replace (Que es mucho mas óptimo) puede que algun maquina de las regexp te haga alguna virguería para que te encuentre los ; entre las comillas con agrupaciones, retrorreferencias o algo así.

Re: Expresiones regulares (sustituir dentro de comillas)

Avatar de rajita
* * * * * * *

(Nivel 1 - 5 posts)

#4 Offline rajita Usuario 11 jun 10
Lo que pasa es que no sé qué indicarle xD
Al final de todo me encontré con una expresión para borrar todo lo que hay dentro de unas comillas en una mano y en la otra mano, una expresión que sustituía todos los ;

Pero no supe hacer una mezcla que funcionara... es que esto se me da fatal, por más que lo intento, cuando se trata de algo complejo que va más allá de direcciones ip, telefonos o validar emails, no consigo entenderlo.

Y si no lo consigo entender, mucho menos hacer que funcione...

SOLUCIÓN PuntuaciónPuntuaciónPuntuaciónRe: Expresiones regulares (sustituir dentro de comillas)

Avatar de jurena
* * * * * * *

(Nivel 7 - 1651 posts)

#5 Offline jurena Moderador 11 jun 10
alrik,
aunque no soy un máquina de las expresiones regulares, te propongo esta para tu caso:
$cadena='hola don pepito;"hola;don";josé';
$patrón = '/(\".*)(;)(.*\")/is';
$sustitución = '${1}${3}';
echo preg_replace($patrón, $sustitución, $cadena);

Re: Expresiones regulares (sustituir dentro de comillas)

Avatar de rajita
* * * * * * *

(Nivel 1 - 5 posts)

#6 Offline rajita Usuario 11 jun 10
Muchísimas gracias, jurena ;)

Funciona estupendo y me viene al pelo!

Re: Expresiones regulares (sustituir dentro de comillas)

Avatar de jurena
* * * * * * *

(Nivel 7 - 1651 posts)

#7 Offline jurena Moderador 11 jun 10
me alegro, rajita,
aunque no he hecho pruebas de lo que ocurre cuando en la cadena hay varios pares de comillas. Vigila si eso ocurre y prueba a ver. Si no te sale bien, habrá que pensar en otra solución.

Re: Expresiones regulares (sustituir dentro de comillas)

Avatar de rajita
* * * * * * *

(Nivel 1 - 5 posts)

#8 Offline rajita Usuario 11 jun 10
Lo tuve en cuenta y estoy a ver si doy con la solución, con un while(pret_match_all()) y dentro del while el preg_replace.

Lo que pasa que se me ha petado el servidor y luego he reiniciado y me ha petado la tarjeta inalambrica xD
Creo que alguien me manda señales para que deje esto... al menos por hoy.

Responder mensaje

Para poder participar debes estar registrado e identificado. Si no estás registrado como usuario de PHP-Hispano, :: Registrar ::
Login / Password   

php-hispano.net 2002 - 2010 | XHTML 1.0
Datos Legales | Webmaster