Foros del Web » Programando para Internet » PHP »

Problema con RegExp

Estas en el tema de Problema con RegExp en el foro de PHP en Foros del Web. Hola tengo un problema con expresiones regulares (RegExp) quiero selecionar algo dentro de 2 delimitadores por ejemplo tengo este HTML <!-- Start Code --> Html ...
  #1 (permalink)  
Antiguo 28/08/2006, 19:51
 
Fecha de Ingreso: julio-2004
Ubicación: Puerto Vallarta, Jalisco, Mexico
Mensajes: 186
Antigüedad: 13 años, 5 meses
Puntos: 0
Problema con RegExp

Hola tengo un problema con expresiones regulares (RegExp)

quiero selecionar algo dentro de 2 delimitadores por ejemplo tengo este HTML

<!-- Start Code -->
Html aqui
con muchos
caracteres diferentes
< , > + " ' \ / etc etc
<!-- End Code -->

aqui mas codigo
que no nos interesa

<!-- Start Code -->
Html aqui
con muchos
caracteres diferentes
< , > + " ' \ / etc etc
<!-- End Code -->

que expresion usaria para seleccionar esas partes y pasarlas a un array o algo asi tengo esta expresion

<!-- Start Code -->[\+;\|\=\:\-\!\.\<\,\>\\\'\"\/\w\s]+<!-- End Code -->

pero esta me da solo un match (incluyendo el codigo que no nos interesa), alguien sabd e una manera para que solo me seleccione lo que esta dentro de me de <!-- Start Code --> y <!-- End Code --> y me de 2 matches (o mas en su caso)

Gracias de antemano

Shanti
__________________
Shanti Castillo G.
  #2 (permalink)  
Antiguo 28/08/2006, 23:26
 
Fecha de Ingreso: junio-2005
Mensajes: 981
Antigüedad: 12 años, 6 meses
Puntos: 2
#<!-- Start Code -->(.*)?<!-- End Code -->#i

Ufff, hace tiempo que no "toco" una expresion regular. Lo que hace basicamente ahi es lo siguiente:
(.*) -> Trae todo lo que pueda haber dentro (nose si te interesa todo, pero eso te lo dejo a ti)
#blablabla#i ->Ahi lo que se usan son 2 limitadores de la expresion regular y con la i al final le decimos que traiga la coincidencia mas corta, si no hacemos esto sucede lo que te pasa a ti, te trae bien desde el tag de inicio pero trae todo hasta el tag de cierre (aunque este se encuentre al final y en el medio alla varios tag's de cierre).

Busca un log. sobre una charla sobre esto mismo en este foro, el mensaje que tiene el log. lo hizo Cluster (la charla la di yo hace bastante). Con esos datos la encuentras rapido. En la charla se explica todo y con ejemplos, tengo que re-leer algunas cosas (desde aquel dia no las utilice mas ).

Saludos.

PD: Otra cosa, fijate las funciones que usas, hay dos "tipos" de expresiones regulares y las funciones trabajan de acuerdo a esto.
  #3 (permalink)  
Antiguo 29/08/2006, 13:06
 
Fecha de Ingreso: julio-2004
Ubicación: Puerto Vallarta, Jalisco, Mexico
Mensajes: 186
Antigüedad: 13 años, 5 meses
Puntos: 0
no me funciono :( me sigue dando un solo match

esta es la funcion que estoy usando

Código:
$result = preg_split('/#<!-- Start Code -->(.*)?<!-- End Code -->#i/', $subject);

y este es el resultado:

Array ( [0] => Html aqui con muchos caracteres diferentes < , > + " ' \ / etc etc aqui mas codigo que no nos interesa Html aqui con muchos caracteres diferentes < , > + " ' \ / etc etc )

un solo match :(
__________________
Shanti Castillo G.
  #4 (permalink)  
Antiguo 29/08/2006, 13:34
 
Fecha de Ingreso: junio-2005
Mensajes: 981
Antigüedad: 12 años, 6 meses
Puntos: 2
Cita:
Iniciado por Shantic Ver Mensaje
Código:
$result = preg_split('/#<!-- Start Code -->(.*)?<!-- End Code -->#i/', $subject);
Los # son los limitadores, en tu expresion regular estas usando de delimitador la /, tienes dos opciones, sacas las barras y dejas como yo te dije, o sacas los # y tambien la i que esta despues de una de ellos y colocas la i despues de la /....

Ahora que re-leo lo que escribi recien, no creo que se entienda. Las opciones son:
Código:
$result = preg_split('#<!-- Start Code -->(.*)?<!-- End Code -->#i', $subject);
Código:
$result = preg_split('/<!-- Start Code -->(.*)?<!-- End Code -->/i', $subject);
Las dos son equivalentes... prueba y me cuentas.
  #5 (permalink)  
Antiguo 29/08/2006, 22:26
 
Fecha de Ingreso: julio-2004
Ubicación: Puerto Vallarta, Jalisco, Mexico
Mensajes: 186
Antigüedad: 13 años, 5 meses
Puntos: 0
pues el resultado es el mismo :(

Código:
$subject = "<!-- Start Code -->
Html aqui 
con muchos 
caracteres diferentes
< , > + \" ' \ / etc etc
<!-- End Code -->

aqui mas codigo
que no nos interesa

<!-- Start Code -->
Html aqui 
con muchos 
caracteres diferentes
< , > + \" ' \ / etc etc
<!-- End Code -->" ;


  $result = preg_split('#<!-- Start Code -->(.*)?<!-- End Code -->#i', $subject); 
  
  print_r($result);
ese es todo mi codigo
y el resultado es

Código:
Array
(
    [0] => <!-- Start Code -->
Html aqui 
con muchos 
caracteres diferentes
< , > + " ' \ / etc etc
<!-- End Code -->

aqui mas codigo
que no nos interesa

<!-- Start Code -->
Html aqui 
con muchos 
caracteres diferentes
< , > + " ' \ / etc etc
<!-- End Code -->
)
le intente de varias maneras de como he leido, pero al parecer ninguna me funciona :(

si tienes alguna otra idea te lo agradeceria.


Shanti
__________________
Shanti Castillo G.
  #6 (permalink)  
Antiguo 30/08/2006, 09:35
 
Fecha de Ingreso: julio-2005
Mensajes: 13
Antigüedad: 12 años, 5 meses
Puntos: 0
Hola amigo,

Me parece que con preg_split no vas a poder obtener lo que desea y se ajusta mejor preg_match_all.

Código PHP:
preg_match_all('/<!-- Start Code -->(.*)<!-- End Code -->/isU',$subject,$result); 
Espero haberte ayudado

Saludos..
  #7 (permalink)  
Antiguo 04/09/2006, 13:20
 
Fecha de Ingreso: julio-2004
Ubicación: Puerto Vallarta, Jalisco, Mexico
Mensajes: 186
Antigüedad: 13 años, 5 meses
Puntos: 0
Parece que si uso Preg_Match_all si me regresa el numero exacto de "matches" pero, no se como imprimir eso, lo que quiero es "extraer" ese texto que esta en medio de esos delimitadores, y imprimirlo.
__________________
Shanti Castillo G.
  #8 (permalink)  
Antiguo 04/09/2006, 13:26
 
Fecha de Ingreso: julio-2004
Ubicación: Puerto Vallarta, Jalisco, Mexico
Mensajes: 186
Antigüedad: 13 años, 5 meses
Puntos: 0
Código PHP:
<?php $subject "<!-- Start Code -->
Html aqui 
con muchos 
caracteres diferentes
< , > + \" ' \ / etc etc
<!-- End Code -->

aqui mas codigo
que no nos interesa

<!-- Start Code -->
Html aqui 
con muchos 
caracteres diferentes
< , > + \" ' \ / etc etc
<!-- End Code -->" 
;


  
preg_match_all('/<!-- Start Code -->.*<!-- End Code -->/isU',$subject,$result);  

 
  
print_r($result);   ?>
ese fue el codigo que funciona a la perfeccion:

Código:
  preg_match_all('/<!-- Start Code -->.*<!-- End Code -->/isU',$subject,$result);
ese es el regexp

Gracias a todo!

:)
__________________
Shanti Castillo G.
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 02:32.