Foros del Web » Programando para Internet » PHP »

Expresión regular

Estas en el tema de Expresión regular en el foro de PHP en Foros del Web. Tengo esta función de bbcode que no me funciona, no me reemplaza nada: Código PHP:    function  bbcode ( $mensaje ) {          $bbcode  = array();          ...
  #1 (permalink)  
Antiguo 30/08/2007, 13:36
Avatar de Raulmmmm  
Fecha de Ingreso: marzo-2007
Ubicación: En otro lugar que tú
Mensajes: 1.549
Antigüedad: 17 años, 1 mes
Puntos: 36
Expresión regular

Tengo esta función de bbcode que no me funciona, no me reemplaza nada:
Código PHP:
  function bbcode($mensaje) {
        
$bbcode = array();
        
$xhtml = array();
        
$bbcode[] = "\[i\].*?\[\/i\]"$xhtml[] = "<i>.*?<\/i>";
        return 
eregi_replace($bbcode,$xhtml,$mensaje); 

    } 
Debe ser un error tonto, pero no consigo solucionarlo...
  #2 (permalink)  
Antiguo 30/08/2007, 14:07
Avatar de mauled  
Fecha de Ingreso: marzo-2005
Ubicación: Cd. de México.
Mensajes: 3.001
Antigüedad: 19 años, 1 mes
Puntos: 33
De acuerdo Re: Expresión regular

No me queda del todo claro que es lo que estas tratando de reemplezar en tu variable $mensaje, si pudieras poner un ejemplo te lo agradeceriamos muchisimo.

Saludillos.
  #3 (permalink)  
Antiguo 30/08/2007, 14:16
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Re: Expresión regular

Creo que la idea es sustituir cosas como

[i ]Hola[/ i]

por

<i>Hola</i>

El error está en usar el patrón con cuantificadores en la cadena de reemplazo.

La forma correcta es:

Código PHP:
function bbcode($mensaje) {
    
$bbcode[] = "\[i\](.*?)\[\/i\]";
    
$xhtml[] = "<i>\\1<\/i>";
    return 
eregi_replace($bbcode,$xhtml,$mensaje);


Saludos.
  #4 (permalink)  
Antiguo 30/08/2007, 15:14
Avatar de Raulmmmm  
Fecha de Ingreso: marzo-2007
Ubicación: En otro lugar que tú
Mensajes: 1.549
Antigüedad: 17 años, 1 mes
Puntos: 36
Re: Expresión regular

Muchas gracias a los dos, pero sigue sin funcionar...
El código que tengo hasta ahora es el que ha hecho alvlin, pero no entiendo lo de el reemplazo, ni funciona. Y la función la uso así:
Código PHP:
bbcode('[i]aaaaaaa[/i]'
Pero no va...
  #5 (permalink)  
Antiguo 30/08/2007, 15:49
Avatar de Gerald  
Fecha de Ingreso: julio-2003
Mensajes: 1.356
Antigüedad: 20 años, 9 meses
Puntos: 2
Re: Expresión regular

Supongamos que tienes esto
Código PHP:
$texto ="[i]aaaaaaa[/i]";
//parseamos tu texto 
bbcode($texto); 
__________________
Solo por Hoy: Trataré de fortalecer mi mente. Estudiaré y aprenderé algo útil
Hoteldipity
Arte Caracol
  #6 (permalink)  
Antiguo 30/08/2007, 18:27
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Re: Expresión regular

Pero ¿qué devuelve la función?
¿hay errores?

A propósito, el código que tenías NO es el mismo que te pegué yo, notá la diferencia en la cadena de reemplazo.


Saludos.
  #7 (permalink)  
Antiguo 31/08/2007, 03:19
Avatar de Raulmmmm  
Fecha de Ingreso: marzo-2007
Ubicación: En otro lugar que tú
Mensajes: 1.549
Antigüedad: 17 años, 1 mes
Puntos: 36
Re: Expresión regular

Perdón si me expliqué mal...
Dije que el código que tengo es el tuyo, alvlin, es decir, este:
Código PHP:
function bbcode($mensaje) {
    
$bbcode[] = "\[i\](.*?)\[\/i\]";
    
$xhtml[] = "<i>\\1<\/i>";
    return 
eregi_replace($bbcode,$xhtml,$mensaje);

Y Gerald, eso es lo que hago, pero no funciona.
  #8 (permalink)  
Antiguo 31/08/2007, 13:32
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Re: Expresión regular

Estoy viendo ahora la página del manual de eregi_replace, y no veo que acepte matrices como parámetros, solo cadenas... Probá pasarle solamente las cadenas, no como matrices. Si funciona así, el problema es ese.


Saludos.
  #9 (permalink)  
Antiguo 02/09/2007, 10:24
Avatar de Raulmmmm  
Fecha de Ingreso: marzo-2007
Ubicación: En otro lugar que tú
Mensajes: 1.549
Antigüedad: 17 años, 1 mes
Puntos: 36
Re: Expresión regular

Gran detalle, alvlin, pero he probado esto:
Código PHP:
$mensaje'[i]a[/i]<i>i</i>';/*
$algo = strip_tags($mensaje);*/
        
$bbcode "\[i\](.*?)\[\/i\]";
        
$xhtml "<i>\\1<\/i>";
        echo 
eregi_replace($bbcode,
        
$xhtml,
        
$mensaje//esta es la 17 
y me da este error:
Código PHP:
Warningeregi_replace() [function.eregi-replace]: REG_BADRPT in on line 17 
  #10 (permalink)  
Antiguo 02/09/2007, 11:38
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Re: Expresión regular

No entiendo exactamente qué significa el error REG_BADRPT, pero no creo que esté en la línea 17 sino en el patrón o en la cadena de reemplazo.
Quizás sea algún caracter mal escapado, por ejemplo el \/ no es necesario, el caracter / no causa ningún problema.

No estoy seguro de cuál sea el problema exacto, sin embargo...


Saludos.
  #11 (permalink)  
Antiguo 04/09/2007, 16:35
Avatar de Raulmmmm  
Fecha de Ingreso: marzo-2007
Ubicación: En otro lugar que tú
Mensajes: 1.549
Antigüedad: 17 años, 1 mes
Puntos: 36
Re: Expresión regular

Hola otra vez alvlin, miré en DesarrolloWeb y en la cadena de reemplazo había que poner en vez de \\1, $1. También ahora uso preg_replace:
Código PHP:
$a = array(
      
"/\[i\](.*?)\[\/i\]/is",
    );
   
$b = array(
      
"<i>$1</i>",
    );
   
$texto preg_replace($a$b$texto);
   return 
$texto
Gracias por haberme ayudado.
  #12 (permalink)  
Antiguo 10/09/2007, 09:34
 
Fecha de Ingreso: septiembre-2007
Mensajes: 9
Antigüedad: 16 años, 7 meses
Puntos: 0
Re: Expresión regular

Hola Gente, como les va, mi nombre es Alejandro, soy nuevo en el foro y estoy buscando ayuda sobre expresiones regulares, no se si este sera el lugar apropiado pero les dejo mi duda:

Código PHP:
ob_start();
the_content();
$html ob_get_contents(); 
ob_get_clean(); 
                
$patron"/\<strong>[^\<]+\<\/strong\>/";
preg_match_all($patron,$html,$regs); 
echo 
"<br><br><br>";
                                
echo 
"<ul id='listaremixes'>";
for(
$i=0$i<count($regs[0]); $i++) {
                            
print 
"<li id='remixeslist'>".($regs[0][$i])."</li>";
}
echo 
"</ul>" 
Lo que necesito es reemplazar el strong que esoty buscando por nada, o sea aca lo que hago es buscar automaticamente todo loq ue se encuentra dentro de los ttags strong, pero eso me lo está devolviendo, y yo lo que quiero es que no me devuelva el texto en negrita, sino que me devuelva el texto comun.

supongo que tendre que usar str_replace, pero la verdad que no doy con el problema, si me pudieran ayudar se los agradeceria mucho ya que es para mi trabajo, desde ya muchas gracias.
  #13 (permalink)  
Antiguo 10/09/2007, 09:41
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Re: Expresión regular

Hola Alejandro,
Por lo general es mejor que hagas tu pregunta en un tema nuevo, pero ya que estamos te la contesto ahora

Necesitás cambiar 2 cosas:
1.- cambiar el separador de la expresión, no usar / porque es un caracter que estás buscando. Por ejemplo, podés usar #

#<strong>[^<]+</strong>#

2.- agregar un juego de paréntesis rodeando lo que querés capturar

#<strong>([^<]+)</strong>#

3.- usar $regs[1], no $regs[0]. el cero corresponde a TODA la coincidencia, mientras que los números del 1 al 9 corresponden a cada uno de los juego de paréntesis que tengas. En este caso, el primer juego de paréntesis es el que guarda lo que estás buscando, así que tenés que usar 1 como índice para $regs.


Saludos.
  #14 (permalink)  
Antiguo 10/09/2007, 09:57
 
Fecha de Ingreso: septiembre-2007
Mensajes: 9
Antigüedad: 16 años, 7 meses
Puntos: 0
Re: Expresión regular

en flowmi.com hay una seccion que se llama Top5, una persona escribe ahi. Pone los titulos con Negrita entonces yo parseo eso automaticamente y lo imprimo ahi. Quiero que en vez de devolver los textos con negrita me los devuelva de otra forma. se puede?
  #15 (permalink)  
Antiguo 10/09/2007, 09:59
 
Fecha de Ingreso: septiembre-2007
Mensajes: 9
Antigüedad: 16 años, 7 meses
Puntos: 0
Re: Expresión regular

ALVLIN MIL gracias! lo hice de esa forma y funciono perfecto!! me salvaste!
gracias por ayudarme! saludos a todos. Ale
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 08:03.