Foros del Web » Programando para Internet » PHP »

Problema con Expresiones regulares

Estas en el tema de Problema con Expresiones regulares en el foro de PHP en Foros del Web. Tengo lo siguiente: $subs = array( '/\[b\](.+)\[\/b\]/Ui' => '<b>$1</b>', '/_(.+)_/Ui' => '<em>$1</em>' ); Pero lo que quiero hacer es que cuando sea negrita [ b ...
  #1 (permalink)  
Antiguo 18/11/2008, 15:34
 
Fecha de Ingreso: mayo-2005
Ubicación: Muy lejos de aquí
Mensajes: 367
Antigüedad: 18 años, 11 meses
Puntos: 0
Problema con Expresiones regulares

Tengo lo siguiente:

$subs = array(
'/\[b\](.+)\[\/b\]/Ui' => '<b>$1</b>',
'/_(.+)_/Ui' => '<em>$1</em>'
);

Pero lo que quiero hacer es que cuando sea negrita [ b ], llame a una función y muestre el texto pasado en $1, algo así:

$subs = array(
'/\[b\](.+)\[\/b\]/Ui' => llamada_a_la_funcion($1),
'/_(.+)_/Ui' => '<em>$1</em>'
);

Pero obviamente no me funciona y no veo como hacerlo funcionar.

A ver si alguien me ayuda.

Gracias!
__________________
Saludos!
  #2 (permalink)  
Antiguo 18/11/2008, 15:36
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Problema con Expresiones regulares

Mmm y si usas preg_replace_callback? Saludos
  #3 (permalink)  
Antiguo 18/11/2008, 15:38
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Problema con Expresiones regulares

bueno, investigando... resuelves mas!

debes agregar el modificador e para evaluar la función...

Código PHP:
preg_replace('/\*(.+?)\*/e''func("\\1")''foo*bar* candy'); 
o el callback, tal cual...
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #4 (permalink)  
Antiguo 18/11/2008, 16:01
 
Fecha de Ingreso: mayo-2005
Ubicación: Muy lejos de aquí
Mensajes: 367
Antigüedad: 18 años, 11 meses
Puntos: 0
Respuesta: Problema con Expresiones regulares

Genial, lo he conseguido con lo siguiente;

Código PHP:
$subs = array(
      
'/\[PHP\](.+)\[\/PHP\]/e' => 'print_php_code (html_entity_decode ("\\1"))',
      
'/_(.+)_/Ui' => '<em>$1</em>'
    
);
                    
$bb_text preg_replace(array_keys($subs), array_values($subs), $pregunta->row['descripcion']); 
echo 
$bb_text
Peor me surje un problema más. Ahora el texto englobado en las etiquetas [ PHP ] me lo pone al principio del mensaje y el resto al final.

¿Como dejar que respete la posición que tenía en el mensaje?
__________________
Saludos!

Última edición por lanceusp; 19/11/2008 a las 01:54
  #5 (permalink)  
Antiguo 18/11/2008, 18:36
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Problema con Expresiones regulares

mmm...

eso se debe a que el callback necesita devolver algo... y tu lo estas imprimiendo (seguramente)

el punto, es que tu función no debe imprimir nada.. debes usar return para devolver el reemplazo que necesitas... ¿te suena?

suerte!
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #6 (permalink)  
Antiguo 19/11/2008, 01:54
 
Fecha de Ingreso: mayo-2005
Ubicación: Muy lejos de aquí
Mensajes: 367
Antigüedad: 18 años, 11 meses
Puntos: 0
Respuesta: Problema con Expresiones regulares

Es que no hago callback

Solo sustituyo e imprimo lo sustituido
__________________
Saludos!
  #7 (permalink)  
Antiguo 19/11/2008, 02:24
Avatar de Deschamps  
Fecha de Ingreso: octubre-2008
Mensajes: 257
Antigüedad: 15 años, 6 meses
Puntos: 8
Respuesta: Problema con Expresiones regulares

Cita:
Iniciado por lanceusp Ver Mensaje
Es que no hago callback
Solo sustituyo e imprimo lo sustituido
¿Qué se supone que hace la función 'print_php_code' pues?
  #8 (permalink)  
Antiguo 19/11/2008, 02:55
 
Fecha de Ingreso: mayo-2005
Ubicación: Muy lejos de aquí
Mensajes: 367
Antigüedad: 18 años, 11 meses
Puntos: 0
Respuesta: Problema con Expresiones regulares

Ok, ya lo tengo.

Código PHP:
                    function print_php_code($str$type='text') {
                        switch (
$type) {
                            case 
"text":
                                        
$str highlight_string($strtrue);
                                        break;
                            case 
"file":
                                        
$str highlight_file($strtrue);
                                        break;
                        }
                    
                        
$str explode("<br />"$str);
                        
$salida "<div style='position:relative; border:1px solid #000000'>";
                        
$salida .= "Codigo PHP<ol>\n";
                        
                        foreach (
$str as $line => $syntax) {
                            
$salida .= "<li><code>" $syntax "</code></li>";
                        }
                        
$salida.= "</ol>\n";
                        
$salida.= "</div>";
                        
                        return 
$salida;
                    }
                    
                    
$subs = array(
                      
'/\<p\>(.+)\<\/p\>/Ui' => '<p>$1</p>',
                      
'/\[PHP\](.+)\[\/PHP\]/e' => 'print_php_code (html_entity_decode ("\\1"))',
                      
'/_(.+)_/Ui' => '<em>$1</em>'
                     
                    
);
                    
                    
$bb_text preg_replace(array_keys($subs), array_values($subs), $pregunta->row['descripcion']); 
                    echo 
$bb_text
__________________
Saludos!
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 02:25.