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

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  Ayuda con expresion Regular [Solucionado]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con expresion Regular [Solucionado]  (Leído 2,185 veces)
yovaninu


Desconectado Desconectado

Mensajes: 349



Ver Perfil
Ayuda con expresion Regular [Solucionado]
« en: 19 Agosto 2012, 07:01 am »

Usando un patron como expresion regular he logrado capturar una parte de mi cadena, el problema surge cuando el inicio y final del patron coincide con todo o parte de la cadena lo cual es incorrecto para mis propositos. Este es el codigo:

Código:

$cadena1 = "mi opiniooooon es que lo que no come lo bota";

$patron="/opini[\w\W]+n/";

echo "Resultado:".preg_replace($patron,"OPINION",$cadena1);


Como se observa el patron me debe permitir capturar la palabra 'opiniooooon' y  reemplazarlo por 'OPINION' (en mayusculas), lo cual es correcto.
El resultado es: mi OPINION es que lo que no come lo bota --- (OK)

Si la cadena cambia a "mi opiniooooon es que lo que no comen lo bota" (observese la letra 'n' de la palabra 'comen'), el resultado es: mi OPINION lo bota --- (Incorrecto),

De lo que deduzco que el patron hace que busque desde 'opini' hasta 'n' pero la 'n' de la palabra 'comen' y todo eso se reemplaza por OPINION y sigue el resto de la cadena.

Pregunta: ¿Como hacer para que el patron reconozca solo aquella palabra donde haga un match o una coincidencia?

Espero haberme explicado y desde ya gracias.


« Última modificación: 19 Agosto 2012, 16:39 pm por yovaninu » En línea

~ Yoya ~
Wiki

Desconectado Desconectado

Mensajes: 1.125



Ver Perfil
Re: Ayuda con expresion Regular
« Respuesta #1 en: 19 Agosto 2012, 16:04 pm »

Tienes dos problemas.
  • El primero es que estas utilizando una Meta-Secuencias que no deberias utilizar en este caso. Que es \W
  • El segundo problema es que debes hacer que la expresión finalice al encontrar la primera coincidencia y no la ultima coincidencia

La razón porque en este caso no debes utilizar la Meta-Secuencia \W, es porque estas combinando \w y \W en un campo de carácter ([\w\W]), con eso vas a tomar cualquier caracteres, ya sea alfa-numérico, signos, caracteres raro, TODO. En este solo necesitas utilizar \w, ya que solo estas capturando una cadena de caracteres del abecedario.

El otro problema es que debes hacer que finalice al encontrar la primera coincidencia y no a la ultima coincidencia. Para esto utilizas el cuantificador ? en combinación al cuantificador + o *.

Código
  1. preg_replace('/opini[\w]+n/i', 'OPINION', 'mi opiniooooon es que lo que no comen lo bota');
Salida:
Código:
mi OPINION es que lo que no comen lo bota


Y utilizando ?, para que termine en la primera coincidencia.
Código
  1. preg_replace('/opini[\w\W]+?n/i', 'OPINION', 'mi opiniooooon es que lo que no comen lo bota');
Salida:
Código:
mi OPINION es que lo que no comen lo bota


Esto seria lo correcto para tu caso:
Código
  1. preg_replace('/opini[\w]+?n/i', 'OPINION', 'mi opiniooooon es que lo que no comen lo bota');
Salida:
Código:
mi OPINION es que lo que no comen lo bota


Te recomiendo esta web para que pruebes tus regex, yo siempre la utilizo: Regex Tool.

Saludos.


En línea

Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.
yovaninu


Desconectado Desconectado

Mensajes: 349



Ver Perfil
Re: Ayuda con expresion Regular
« Respuesta #2 en: 19 Agosto 2012, 16:38 pm »

Correcto. Muy agradecido por tan clara solucion y por tan buena explicacion.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda - Dibujar Poligono Regular con Winbgim
Programación C/C++
alejandrosevenfold 0 2,174 Último mensaje 20 Septiembre 2012, 22:47 pm
por alejandrosevenfold
Ayuda Expresion Regular
Ingeniería Inversa
macmaikel 2 2,663 Último mensaje 11 Junio 2013, 03:36 am
por macmaikel
Ayuda con expresión regular
Programación General
betopuck 5 3,552 Último mensaje 4 Octubre 2017, 20:19 pm
por Eleкtro
Ayuda con expresion regular texto y contenido dentro de llaves.
Programación General
0roch1 0 2,431 Último mensaje 25 Julio 2019, 22:56 pm
por 0roch1
Solucionado: Problema con expresión de funciones.
Foro Libre
Tachikomaia 0 1,629 Último mensaje 2 Septiembre 2023, 03:15 am
por Tachikomaia
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines