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

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  Problema con expresión regular
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema con expresión regular  (Leído 4,786 veces)
egyware


Desconectado Desconectado

Mensajes: 526



Ver Perfil WWW
Problema con expresión regular
« en: 11 Febrero 2010, 23:30 pm »

Hola a todos
estoy haciendo una expresion regular que no me funciona bien del todo
esta es

Código
  1. $expresion = '/\/(.*?)#/';
Esta es la expresión, (buscando en internet logre hacer esta expresion regular)
que extrae el contenido /algo# pero al combinarlo con otras expresiones regulares como BBCode me detecta otras cosas que no debe ser como el cierre de un tag html
mi duda es que si me pueden decir como NO incluir el ']', '>' y el espacio ya que me causa varios problemas
Saludos
gracias por su tiempo


En línea

~ Yoya ~
Wiki

Desconectado Desconectado

Mensajes: 1.125



Ver Perfil
Re: Problema con expresión regular
« Respuesta #1 en: 11 Febrero 2010, 23:33 pm »

Ok, no entendi muy bien, escribe lo que quieres sacar en un :
Código:
Aqui


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.
egyware


Desconectado Desconectado

Mensajes: 526



Ver Perfil WWW
Re: Problema con expresión regular
« Respuesta #2 en: 11 Febrero 2010, 23:49 pm »

Este es el texto por ejemplo

Código:
Hola [b]Mundo[/b] /omg#
Deberia usando las las expresiones regulares quedar algo asi
Código:
Hola <strong>Mundo</strong> <img src="omg.gif" />

Pero con el actual codigo que tengo me sale algo asi
Código:
Hola [b]Mundo[<img src="b] /omg.gif">
Bueno no entendi ese "aqui" asi que puse un ejemplo, mi idea es que mi expresion regular no tome en cuenta ni el espacio ni el ] o >
Gracias
Saludos
En línea

raul338


Desconectado Desconectado

Mensajes: 2.633


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: Problema con expresión regular
« Respuesta #3 en: 11 Febrero 2010, 23:54 pm »

Mis problemas favoritos ;-)

Bueno, a tu parecer solo queres capturar valores alfanumericos? (numeros y letras) entonces es \w

Si NO queres aceptar ciertos valores, se hace con un ^ al principio del corchete, ej: [^....]

Entonces te quedaria:
Código:
$expresion = '/\/(\w*)?#/';

o sino
Código:
$expresion = '/\/([^\s\[\]...]*)?#/';

(Ojo, todo esto lo hice al aire, no lo probe, de todas formas deberias probar "en masa" :xD


Advertencia - mientras estabas escribiendo, una nueva respuesta fue publicada. Probablemente desees revisar tu mensaje.

Ahh..entonces lo que te doy no te resuelve el problema:
Solo una pregunta, si yo pongo esto

Código:
Hola [b]Mundo[/b] /omg#

Con la expresion regular me deberia salir esto? (o capturar esto):

Código:
Hola Mundo /omg
En línea

~ Yoya ~
Wiki

Desconectado Desconectado

Mensajes: 1.125



Ver Perfil
Re: Problema con expresión regular
« Respuesta #4 en: 12 Febrero 2010, 00:16 am »

Ya se lo que quieres hacer, es como un BBCODE, bueno aqui lo que pediste.
Código
  1. <?php
  2.  
  3. function bbcode($text){
  4.  
  5. $text = str_replace('[b]','<strong>',$text);
  6. $text = str_replace('[/b]','</strong>',$text);
  7. $text = str_replace('[img]','<img src="',$text);
  8. $text = str_replace('[/img]','">',$text);
  9. return $text;
  10. }
  11.  
  12. echo bbcode('[b]Hola como estan[/b]');
  13. echo bbcode('[img]http://www.grupogenova.net/Moncan/V20/imgs/upload/gato.jpg[/img]');
  14. ?>

Salida:


En este caso, el problema no necesita de expresiones regulares para resolverlo, porque no buscas parametros, si no una palabra en expecifica y remplazarla por un Tag html valido.
« Última modificación: 12 Febrero 2010, 00:20 am por yoyahack » 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.
egyware


Desconectado Desconectado

Mensajes: 526



Ver Perfil WWW
Re: Problema con expresión regular
« Respuesta #5 en: 12 Febrero 2010, 00:24 am »

Yuhu!!!
Lo logre usando esta expresion y le agregue unas cosa mas,gracias a ti

Código
  1. $expresion = '/\/([^\s\[\]&;...]*)?#/'
entonces recapitulando
^ sirve para no considerar y se usa al principio
... para que sirve?

Pregunto para saber no mas, ya solucione mi problema

Advertencia - mientras estabas escribiendo, una nueva respuesta fue publicada. Probablemente desees revisar tu mensaje.

Para la otra respuesta que salio, no se me ocurrio pero usar expresiones regulares me facilita la posibilidad de agregar más BBCode y otras cosas como esta

Gracias a todos por su respuestas rapidas, lo agradezco
En línea

raul338


Desconectado Desconectado

Mensajes: 2.633


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: Problema con expresión regular
« Respuesta #6 en: 12 Febrero 2010, 00:31 am »

Ahhh! Ahora ya entendi yo tambien (despues de yoyahack y releer el post anterior ...al mio :¬¬ ...:P)

Claro, no necesitas expresiones regulares (aunque se puede hacer, obteniendo los grupos). Solo que cada uno tiene su pro y su contra:

Si lo haces mediante str_replace te combiene contar los tags y ver si cierran, porque si te queda un tag abierto te arruina el resto de la pagina (me ha pasado, tambien quise implementar mi propio bbcode). en cambio si lo haces en expresiones regulares (algo asi, porque no se mucho de las funciones que ofrece PHP para expresiones regualres:

Código
  1. $var = "[b]Hola mundo![/b] /foto.jpg#";
  2. list($antes, $medio, $despues) = split("(.*)\[b\](.*)\[\/b\](.*)", $var);
  3. $newVar = "$antes<b>$medio</b>$despues";
  4.  

O algo asi, no lo he probado (lo probare), deberia funcionar

Advertencia - mientras estabas escribiendo, una nueva respuesta fue publicada. Probablemente desees revisar tu mensaje.

egyware, el "..." no existe asi, es "." que significa cualquier caracter, "..." significa 3 veces cualquier caracter seguidos :P

Edit, en el editor de expreiones regulares, indica que no tiene que haber un "." entre lo capturado jeje, no se toma como cualquier caracter, sino como punto. o sea que si hay un "/hola.mundo#" no te lo va a tomar como valido, asi tambien con el "&;"
« Última modificación: 12 Febrero 2010, 00:39 am por raul338 » En línea

~ Yoya ~
Wiki

Desconectado Desconectado

Mensajes: 1.125



Ver Perfil
Re: Problema con expresión regular
« Respuesta #7 en: 12 Febrero 2010, 00:32 am »

Bueno egyware, si piensas extender tu lista de BBCODE, puedes mejor crear un POO así tu code queda mas bonito, organizado y optimizado.
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.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema con expresión regular PCRE
PHP
samur88 2 1,382 Último mensaje 8 Febrero 2012, 17:34 pm
por samur88
ayuda con una expresion regular :(
Programación General
Elemental Code 6 2,576 Último mensaje 23 Mayo 2012, 04:10 am
por Elemental Code
duda sobre patron de expresion regular
Programación General
MagnusIvanovich 5 1,784 Último mensaje 14 Marzo 2013, 20:11 pm
por 1mpuls0
Ayuda Expresion Regular
Ingeniería Inversa
macmaikel 2 1,270 Último mensaje 11 Junio 2013, 03:36 am
por macmaikel
Problema con expresión regular en PHP
PHP
Yaldabaot 1 1,118 Último mensaje 22 Julio 2016, 13:33 pm
por Adrialmend
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines