Foros del Web » Programando para Internet » PHP »

Fallo con Regex al detectar el patron

Estas en el tema de Fallo con Regex al detectar el patron en el foro de PHP en Foros del Web. Buenas, estoy trasteando con la regex y se me ha planteado un problema que no se como resolver dado mi poco conocimiento con la expresiones ...
  #1 (permalink)  
Antiguo 24/08/2011, 19:27
Avatar de Nazari  
Fecha de Ingreso: febrero-2010
Ubicación: Canarias - Tenerife
Mensajes: 62
Antigüedad: 14 años, 2 meses
Puntos: 7
Fallo con Regex al detectar el patron

Buenas, estoy trasteando con la regex y se me ha planteado un problema que no se como resolver dado mi poco conocimiento con la expresiones regulares, el caso es que por ejemplo tengo este código

Código PHP:
texto variado
<ini:xx>
Aquí un texto
<fin:xx>

Texto fuera de mi etiquetas

<ini:xx>
Aquí otro texto
<fin:xx>
texto variado 
Y quiero casar
Código PHP:
<ini:xx>
Aquí un texto
<fin:xx
y
Código PHP:
<ini:xx>
Aquí otro texto
<fin:xx
con la Expresión

Código PHP:
'/\<ini:xx\>[\s\S]*\<fin:xx\>/' 
Pero esto me devuelve

Código PHP:
<ini:xx>
Aquí un texto
<fin:xx>

Texto fuera de mi etiquetas

<ini:xx>
Aquí otro texto
<fin:xx
Osea, en ves de cogerme el fin:xx mas cercano, me coge el ultimo, incluyéndome por tanto todo el contenido que esta entre mis etiquetas, parece algo sencillo de solucionar pero no doy con la solución, agradecería cualquier sugerencia o guía hacia la solución.

Un Saludo
__________________
Nazarí González
http://www.nazariglez.com - @Nazariglez
  #2 (permalink)  
Antiguo 24/08/2011, 19:30
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Fallo con Regex al detectar el patron

Te recomiendo que leas este aporte: [APORTE] Expresiones PCRE
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #3 (permalink)  
Antiguo 24/08/2011, 19:39
Avatar de Nazari  
Fecha de Ingreso: febrero-2010
Ubicación: Canarias - Tenerife
Mensajes: 62
Antigüedad: 14 años, 2 meses
Puntos: 7
Respuesta: Fallo con Regex al detectar el patron

Buenas Andresdzphp, muy buen hilo con ejemplos y una explicación bastante completa de las regex, pero (me lo he leído) sigo sin encontrar una solución a lo que necesito, puesto que no me considero una persona que pide ayuda a la primera, sino que busco información leo, releo y pruebo muchas veces, y como podrás imaginar o no veo clara la solución a mi problema, o no encuentro la información que busco, o directamente no se que información buscar para realizar esta función en concreto.

Agradezco tu ayuda amigo.
__________________
Nazarí González
http://www.nazariglez.com - @Nazariglez
  #4 (permalink)  
Antiguo 24/08/2011, 19:47
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Fallo con Regex al detectar el patron

Código PHP:
Ver original
  1. '/<ini:xx>(.*?)<fin:xx>/is'

así tienes en un array

<ini:xx>
Aquí un texto
<fin:xx>

y

<ini:xx>
Aquí otro texto
<fin:xx>

en el caso de que uses preg_match_all
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #5 (permalink)  
Antiguo 25/08/2011, 08:22
Avatar de Nazari  
Fecha de Ingreso: febrero-2010
Ubicación: Canarias - Tenerife
Mensajes: 62
Antigüedad: 14 años, 2 meses
Puntos: 7
Respuesta: Fallo con Regex al detectar el patron

Muchas gracias andresdzphp, funciona a la perfección, pero se me plantea la duda, el /is sirve para que el punto recoja todos los caracteres y sea insensible a mayúsculas y minúsculas, el * para contar 0 o mas coincidencias, pero porque entre paréntesis y el ?.

Un Saludo
__________________
Nazarí González
http://www.nazariglez.com - @Nazariglez
  #6 (permalink)  
Antiguo 25/08/2011, 10:36
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Fallo con Regex al detectar el patron

- La letra i para que no distinga entre mayúsculas y minúsculas.
- La letra s para que pueda capturar todo, incluyendo nueva línea
- El paréntesis sirve para iniciar un subpatron o captura (Lo coloqué en caso de que necesitaras los textos sin las etiquetas <ini:xx> <fin:xx>
- El signo de interrogación significa uno o ninguno. Lo coloqué para que busque sólo la primera aparición de etiquetas y no se vaya hasta la última.

En caso de no querer los textos que hay entre las etiquetas, quitas los paréntesis.

Código PHP:
Ver original
  1. '/<ini:xx>.*?<fin:xx>/is'
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #7 (permalink)  
Antiguo 26/08/2011, 08:00
Avatar de Nazari  
Fecha de Ingreso: febrero-2010
Ubicación: Canarias - Tenerife
Mensajes: 62
Antigüedad: 14 años, 2 meses
Puntos: 7
Respuesta: Fallo con Regex al detectar el patron

Muchas gracias por la explicación y el patrón, ya entiendo lo de los subpatrones, me has ahorrado varias lineas de código porque yo eliminaba las etiquetas de la coincidencias con str_replace, y con tu regex es todo mas sencillo.

Un Saludo
__________________
Nazarí González
http://www.nazariglez.com - @Nazariglez

Etiquetas: fallo, patron, regex
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 05:39.