Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: Frost en 5 Enero 2012, 15:06 pm



Título: [preg_match_all] no se que hace esta linea
Publicado por: Frost en 5 Enero 2012, 15:06 pm
En realidad no estoy seguro que es lo que hace esta linea, quien me puede explicar un poco

se está ocupando para buscar dentro de un .xml y hay algo que hace que falle en la lectura pero me topé con esta linea y no tengo claro lo que hace

Código:
$result=preg_match_all("/(<FORMULARIO>.*?<\/FORMULARIO>.*?)/s", $datos2, $archivos);



segun php.net "preg_match_all — Realiza una comparación global de una expresión regular"

la parte que no comprendo es la expresión regular

saludos


Título: Re: [preg_match_all] no se que hace esta linea
Publicado por: Etex en 5 Enero 2012, 15:25 pm
Te lo explico para que lo entiendas:

Sirve para buscar valores con condiciones que cumpla el string.
En ese caso, busca valores que esten entre las etiquetas "Formulario" del XML

Deberias leer algun tutorial de expresion regulares para que las entiendas mejor.

Código:
http://www.manualdephp.com/codigos-php/expresiones-regulares-php.html

Hay varios muy buenos

Saludos


Título: Re: [preg_match_all] no se que hace esta linea
Publicado por: Frost en 5 Enero 2012, 15:46 pm
ok gracias

"El punto . como metacaracter" entiendo entonces que efectivamente esta buscando todo lo que se encuentre entre <FORMULARIO></FORMULARIO>

pero que pasa con *?

Citar
*   ==>El asterisco indica que el carácter que lo precede puede aparecer cero, una, o más veces. Por ejemplo, "0*42" casa con 42, 042, 0042, 00042, etcétera.


?  ==> El signo de interrogación indica que el carácter al que sigue puede aparecer como mucho una vez. Por ejemplo, "ob?scuro" casa con oscuro y obscuro

saludos


Título: Re: [preg_match_all] no se que hace esta linea
Publicado por: Etex en 5 Enero 2012, 16:07 pm
El * quiere decir puede haber 0 o mas caracteres del . (cualquier caracter). Es decir si solo pongo . (punto) solo seria un caracter, pero si pongo .* seria de 0 a mas caracteres.

Espero que no te haya mezclado.

Saludos


Título: Re: [preg_match_all] no se que hace esta linea
Publicado por: ‭lipman en 5 Enero 2012, 16:37 pm
Y porqué aparece el interrogante seguido del asterisco?


Título: Re: [preg_match_all] no se que hace esta linea
Publicado por: #!drvy en 5 Enero 2012, 17:45 pm
Hola

el *? significa, 0 o mas pero ungreedy.

Si la expresión es greedy (sin el ?), esta consumirá todos los caracteres (comprobara todo) antes de finalizar.
Si es ungreedy (con el ?) (equivalente a {0,1}), esta consumirá lo menos posible.

La explicación aquí en ingles:
Código:
http://www.skdevelopment.com/php-regular-expressions.php

Os recomiendo este cheetsheet sobre expresiones regulares:
Código:
http://www.addedbytes.com/cheat-sheets/download/regular-expressions-cheat-sheet-v2.png

Saludos


Título: Re: [preg_match_all] no se que hace esta linea
Publicado por: Frost en 5 Enero 2012, 19:37 pm
ok gracias voy a revisar esto

saludos


Título: Re: [preg_match_all] no se que hace esta linea
Publicado por: ~ Yoya ~ en 7 Enero 2012, 05:45 am
Te recomiendo esta pagina para testear las expresiones regulares:

http://regex.larsolavtorvik.com/

Saludos.