Página 1 de 1

Expresion Regular, que error hay?

Publicado: 07 Feb 2009, 00:50
por emma93
Buenas ^^

Vengo con una preguntita.

Estoy creando una aplicación, pero me encuentro con un error. Hace un par de días le pregunte a un amigo del foro, como se hacía una duda que tenía, y el me la respondió con una expresión regular, de la siguiente manera:

Código: Seleccionar todo

$Source = _IEDocReadHTML($ie)
	$flog = StringRegExp($Source, '">(.*?)</A><BR>', 1)
	_IENavigate($ie,"http://www.metroflog.com/" & $flog[0])
Perfecto, el código me anduvo re bien. Ahora, lo que yo quiero es una expresión regular que tome la palabra que hay entre class="flog"> y </A></BR>

Entonces se me ocurrió hacer lo siguiente:

Código: Seleccionar todo

$Source = _IEDocReadHTML($ie)
	$flog = StringRegExp($Source, 'flog">(.*?)</A><BR>', 1)
	_IENavigate($ie,"http://www.metroflog.com/" & $flog[0])
Pero cuando ejecuto el ejemplo, me tira un error:

Código: Seleccionar todo

==> Subscript used with non-Array variable.:
_IENavigate($ie,"http://www.metroflog.com/" & $flog[0])
_IENavigate($ie,"http://www.metroflog.com/" & $flog^ ERROR
Espero que me puedan ayudar.

Salu2 ^^

Re: Expresion Regular, que error hay?

Publicado: 07 Feb 2009, 07:22
por gna08
MIra lo que pasa es k quien te dice k ay eso en class="flog"> y </A></BR> como sabes k es flog">? eso suele variar de l forma k lees el codigo, y muy seguro que el codigo que estas analizando( el de fuente del html) es la pagina guardada desde el explorador o leida desde ver source, de esa manera el codigo de fuente k te muestra es totalmente diferente al que te devuelve la funcion _IEDocReadHTML($ie), esto obtienes con la dicha funcion class=flog href="/un_flog">un_flog</A><BR>, y por ello el error, no puedes obterlo con tu code :smt009 , asik :smt018 no te fies con cuando lees el html, siempre varia del explorador k uses y la fuicion anteriormente dicha,
Entonces dejalo como esta, funciona totalmente igual:

Código: Seleccionar todo

#include <IE.au3>
$ie = _IECreate("http://metroflog.com/directory/random", 1)
$Source = _IEDocReadHTML($ie)
$flog = StringRegExp($Source, '">(.*?)</A><BR>', 1)
_IENavigate($ie,"http://www.metroflog.com/" & $flog[0])
O explica cual es tu problema :smt003
Salu2 :smt006

Re: Expresion Regular, que error hay?

Publicado: 07 Feb 2009, 17:56
por emma93
Me estás diciendo que el código fuente no es ese.

La estructura con la que me diste la expresión regular me genera a veces web's que no son MetroFlog's, por lo cual no me sirve.

Entonces para asegurar que todas son metroflogs necesito anteponerle a la expresión regular un Class="flog"

No se si te haz fijado bien, la estructura que tu me diste de Class="Flog" en el código fuente de un metroflog es la siguiente:

Código: Seleccionar todo

class=flog href="/un_flog">un_flog</A><BR>
Ve al Firefox, o al Internet Explorer, o a Google Chrome, al que quieras. Y verás que esa no es la estructura, si no que es:

Código: Seleccionar todo

<a href="/metroflog" class="flog">Metroflog</A></BR>
Y ese código no cambia en ningun navegador. Lo que mas se puede llegar a cambiar de un navegador a otro es la fuente, pero el código fuente no cambia, ya que lo interpreta el navegador, por lo cual no puede haber una confusión entre navegadores.

Un salu2

PD: Si todavía alguien tiene una respuesta, por favor que me ayude. Lo que yo pedi es como hacer una expresión regular para que me tome desde class="flog"> hasta </A></BR>

Re: Expresion Regular, que error hay?

Publicado: 07 Feb 2009, 18:57
por gna08
Haber hermano, concuerdo con el tema de k todos los exploradores es igual el code, y era sabido k de ahi lo sacaste, pero no va al caso, me refiero a lo siguiente, cuando tu intentas leer el documento html con funcion _IEDocWriteHTML() el codigo retornado varia, porque te lo digo?, te propongo lo siguiente, que ejecutes este script, y compares ambos codigos de fuente, y si tengo razon, obvio que talves no me des la razon, pero estare en lo cierto, en caso contrario, me cerras la boca :smt012 , haber, porque estoy tan seguro?, estoy corriendo un script hace casi 2 meses k lo k hace es firmar hasta en segundo plano, utilize esta forma, la anterior no existe, ejecuta este code y te sacas la duda si?, ah y el error ese es k no existe tal expresion, y justamente es lo k te digo...

Codigo:

Código: Seleccionar todo

#include <IE.au3>
$ie = _IECreate("http://metroflog.com/directory/random")
FileWrite("Fuente de _IECreate.html",_IEDocReadHTML($ie))
Proba, no te toma ni dos segundos intenarlo, este te genera un html, compara este y el k lees con tus exploradores, yo mil veces estoy con las funciones de IE, no voy a hablar al vicio :smt018

Re: Expresion Regular, que error hay?

Publicado: 08 Feb 2009, 00:56
por emma93
Está re bien hermano, tienes toda la razón.

Y no pienses que todo lo que hago es para pelear :smt018 , solo que de los errores se aprenden :smt033

Un salu2

Re: Expresion Regular, que error hay?

Publicado: 08 Feb 2009, 07:59
por Chefito
Bueno.....ahora va mi alternativa :smt003 :
Esto para el primer (unicamente) el primer link:

Código: Seleccionar todo

#include <IE.au3>
#include <INet.au3>

$TextoWeb = _INetGetSource("http://metroflog.com/directory/random")
$flog = StringRegExp($TextoWeb, 'flog">(.*?)</a><br>',1)
_IECreate("http://www.metroflog.com/" & $flog[0])
Y esto otro para los 20 links de la página almacenados en el array. Ejemplo con el link 5 (van del 0 al 19):

Código: Seleccionar todo

#include <IE.au3>
#include <INet.au3>

$TextoWeb = _INetGetSource("http://metroflog.com/directory/random")
$flog = StringRegExp($TextoWeb, 'flog">(.*?)</a><br>',3)
_IECreate("http://www.metroflog.com/" & $flog[4])
Si os liais mucho con la función StringRegExp, recordar que otra alternativa muy buena es la función _StringBetween.

Y como digo yo.....casi siempre hay solución para todo (mejor o peor) y alguna que otra alternativa suplementaria.

Saludos :smt026 .