Ver Mensaje Individual
  #1 (permalink)  
Antiguo 05/05/2007, 15:47
conkis
 
Fecha de Ingreso: mayo-2007
Mensajes: 39
Antigüedad: 17 años
Puntos: 0
Expresiones regulares y sistema [code]

Código PHP:
//sustitullo todos los caracteres del texto por sus entidades html, y pongo la primera letra en mayuscula

$textohtmlspecialchars(ucwords($texto));

//busco las coincidencias con la expresion regular en texto y las guardo en un array ($regs)

$reg=eregi("((\[code\])(.*)(\[\/code\]))",$texto$regs);

//trasformo las entidades html del lo que se encuentra entre [code] y [/code]

$codigo=html_entity_decode($regs[3]);

//le paso la funcion que colorea el codigo, aplicada a lo que se encontrabaq entre [code] y [/code], el 1 es para que lo guarde y no lo muestre

$codigohighlight_string($codigo,1);

//sustitullo [code]codigo[/code] por un div que contiene el codigo coloreado.

$texto=eregi_replace('((\[code\])(.*)(\[\/code\]))',"<div>$codigo</div>",$texto); 
el problema es que al procesarse, como la expresion regular indica que entre [code ] y [ /code] puede estar cualquier cosa, incluso otro [/code], me muestra todo lo que hay si en una misma pagina incluyo 2 codigos.

ejemplo:
no es codigo [code ]codigo, incluso si pongo [/code ] sigue siendo codigo [code ] sigue siebndo codigo [ /code] ya no es codigo

si incluyo un solo codigo no hay problema, la cuestion es que no me cierra correctamente el 1º [code ], sino que aguanta hasta el ultimo [/code ] que encuentra.

nose si me explico... aver si alguien me puede ayudar