Foros del Web » Programando para Internet » PHP »

Expresiones Regulares Tags

Estas en el tema de Expresiones Regulares Tags en el foro de PHP en Foros del Web. Buenas, estoy tratando de hacer un sistema para obtener Tags, asi como lo tengo ahora, funciona, pero no es "opcional" para el ELSE Código PHP: ...
  #1 (permalink)  
Antiguo 02/07/2009, 23:44
Avatar de Fernand0  
Fecha de Ingreso: septiembre-2005
Ubicación: Buenos Aires
Mensajes: 610
Antigüedad: 19 años, 2 meses
Puntos: 19
Expresiones Regulares Tags

Buenas, estoy tratando de hacer un sistema para obtener Tags, asi como lo tengo ahora, funciona, pero no es "opcional" para el ELSE

Código PHP:
$catcher='%<if ?(.+)>((?:[^<])+)</if><else>((?:[^<])+)</else>%';
$var='<if h>o</if><else>la</else>';
echo(
'<br>'.preg_replace($catcher'$1$2$3'$var).'<br>'); 
Necesito que el else sea opcional, o sea 0 o 1, el problema es que no me lo toma cuando encierro a todo el else... o sea

Código PHP:
$catcher='%<if ?(.+)>((?:[^<])+)</if>(?:<else>((?:[^<])+)</else>)?%'
Asi no funciona, ya probe mil maneras, por favor una mano, ya no me da la cabeza @.@

Saludos

Última edición por Fernand0; 02/07/2009 a las 23:53
  #2 (permalink)  
Antiguo 03/07/2009, 00:12
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Expresiones Regulares Tags

que tal así??

Código:
%<if\s*([^>]*)>(.*)</if>\s*(?:<else>(.*)</else>)?%Uis
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 03/07/2009, 12:45
Avatar de Fernand0  
Fecha de Ingreso: septiembre-2005
Ubicación: Buenos Aires
Mensajes: 610
Antigüedad: 19 años, 2 meses
Puntos: 19
Respuesta: Expresiones Regulares Tags

Gracias pateketrueke.. funciono a la perfeccion con el \s* ^^


Código HTML:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>testing</title>
</head>

<body style="font-family: Lucida Sans Unicode; font-size: 11px;">
hola <$Name> <$LastName> como estas?!!
<br/>
    <if $Name==$Name>
    if:1
        <if $Name==$LastName>
        if:2
        </if>
        <else>
        else:2
        </else>
    </if>
    <else>
    else:1
    </else>
</body>
</html> 
Fragmento..
Código php:
Ver original
  1. function ifParser($matches)
  2.     {
  3.         $ifCatcher='%<if\s*(.+)>((?:[^<]|(?R))+)</if>\s*(?:<else>((?:[^<]|(?R))+)</else>)?%';  
  4.        
  5.         if(is_array($matches))
  6.         {
  7.             preg_match('%(.+)([^\w]+[==|!=|<=|>=|<|>|&&|\|\|]+)(.+)%', $matches[1], $c0nd);
  8.            
  9.             if(substr($c0nd[1], 0, 1)=='$') $c0nd[1]="'".$this->_var[substr($c0nd[1], 1)]."'";
  10.             if(substr($c0nd[3], 0, 1)=='$') $c0nd[3]="'".$this->_var[substr($c0nd[3], 1)]."'";
  11.            
  12.             $cond=$c0nd[1].$c0nd[2].$c0nd[3];
  13.             $_eval='if('.$cond.') $matches=$matches[2]; else $matches=$matches[3];';
  14.             eval($_eval);
  15.         }
  16.        
  17.         return(preg_replace_callback($ifCatcher, array($this, 'ifParser'), $matches));
  18.     }

Lo que si no funciona si pongo otras etiquetas dentro del if o else, estoy viendo como hacerlo, despues si me sale modifico el codigo

Saludos

Última edición por Fernand0; 03/07/2009 a las 13:09
  #4 (permalink)  
Antiguo 03/07/2009, 14:42
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Expresiones Regulares Tags

por curiosidad, ya había visto en el manual de PHP un buen ejemplo de etiquetas recursivas...

o bien, citas anidadas, etc... el caso es el mismo (Ejemplo #3)

http://www.php.net/preg_replace_callback


igual y te sirve, suerte!
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:06.