Foros del Web » Programando para Internet » PHP »

Expresiones regulares y sistema [code]

Estas en el tema de Expresiones regulares y sistema [code] en el foro de PHP en Foros del Web. Código PHP: //sustitullo todos los caracteres del texto por sus entidades html, y pongo la primera letra en mayuscula $texto =  htmlspecialchars ( 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 = ...
  #1 (permalink)  
Antiguo 05/05/2007, 15:47
 
Fecha de Ingreso: mayo-2007
Mensajes: 39
Antigüedad: 16 años, 11 meses
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
  #2 (permalink)  
Antiguo 06/05/2007, 02:56
Avatar de tozanni  
Fecha de Ingreso: mayo-2007
Ubicación: Seattle, WA
Mensajes: 62
Antigüedad: 16 años, 11 meses
Puntos: 0
Re: Expresiones regulares y sistema [code]

Si te explicas, el problema que te paso es por el comportamiento greedy de la expresion regular. Trata modificando tus expresiones asi:

Código PHP:
$texto=eregi_replace('\[code\]([^\[]*)\[\/code\]',"<div>$codigo</div>",$texto); 
Basicamente lo que se esta haciendo es hacer match de "cualquier cosa hasta un un left-bracket, a menos que este sea [/code]". Checalo y nos cuentas si te funciono (a mi si)
  #3 (permalink)  
Antiguo 06/05/2007, 05:25
 
Fecha de Ingreso: mayo-2007
Mensajes: 39
Antigüedad: 16 años, 11 meses
Puntos: 0
Re: Expresiones regulares y sistema [code]

MUCHAS GRACIAS TIO xd SI KE ME FUNCIONA
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 05:07.