Ayuda con StringRegExp en una web
- arkcrew
- Profesional del Autoit
- Mensajes: 506
- Registrado: 28 Sep 2009, 19:17
- Ubicación: Granada, España
- Contactar:
Ayuda con StringRegExp en una web
Hola a todos,
Como verán, esta función siempre se me resiste ya que no comprendo del todo su funcionamiento, sé que la función extrae los valores asociados entre dos parámetros, pero no entiendo del todo cuando usar los (.*?) y demás cosas que cita la ayuda..
El problema que tengo, es que al sacar los enlaces de una página web cuya estructura es muy simple:
<li ><a title="Escuchar Same in the end - sublime" href="listen/1f743df/same-in-the-end-sublime"><span class="song">Same in the end</span> - <span class="group">sublime</span></a><a class="play" lang="en" xml:lang="en" title="Escuchar en una ventana independiente" onclick="window.open('http://www.goear.com/listen_popup.php?v ... izable=yes')" href="javascript:void(0);"><img alt="Play" src="http://www.goear.com/lib/img/popup.png" /></a><p class="comment">sublime - same in the end</p><span class="length">2:37</span></li>
La estructura se repite para cada canción así que es relativamente facil obtener resultados:
$artistacancion = StringRegExp($html, '<span class="group">(.*?)</span>', 3)
$TituloCancion = StringRegExp($html, '<span class="song">(.*?)</span>', 3)
$linkCancion = StringRegExp($html, '<a title="(.*?)" href="(.*?)"><span class="song">', 3)
Esas son mis tres variables, de las cuales la primera y la segunda funcionan de lujo, el problema está en el link, SOLO necesito asociar la parte del href despreciando así el valor contenido en title se desprecia, he probado a poner solo href="(.*?)"><span class="song">', 3) pero se lia bastante el código...
otra cosa que se me ocurrió fué
If StringLeft($linkCancion[$n], 7) <> "listen/" Then
$link = $linkCancion[$n + 1]
EndIf
pero es una chapuza que repite los links dobles y da un resultado erróneo...
Ayuda porfavor
Gracias!
Saludos!
Como verán, esta función siempre se me resiste ya que no comprendo del todo su funcionamiento, sé que la función extrae los valores asociados entre dos parámetros, pero no entiendo del todo cuando usar los (.*?) y demás cosas que cita la ayuda..
El problema que tengo, es que al sacar los enlaces de una página web cuya estructura es muy simple:
<li ><a title="Escuchar Same in the end - sublime" href="listen/1f743df/same-in-the-end-sublime"><span class="song">Same in the end</span> - <span class="group">sublime</span></a><a class="play" lang="en" xml:lang="en" title="Escuchar en una ventana independiente" onclick="window.open('http://www.goear.com/listen_popup.php?v ... izable=yes')" href="javascript:void(0);"><img alt="Play" src="http://www.goear.com/lib/img/popup.png" /></a><p class="comment">sublime - same in the end</p><span class="length">2:37</span></li>
La estructura se repite para cada canción así que es relativamente facil obtener resultados:
$artistacancion = StringRegExp($html, '<span class="group">(.*?)</span>', 3)
$TituloCancion = StringRegExp($html, '<span class="song">(.*?)</span>', 3)
$linkCancion = StringRegExp($html, '<a title="(.*?)" href="(.*?)"><span class="song">', 3)
Esas son mis tres variables, de las cuales la primera y la segunda funcionan de lujo, el problema está en el link, SOLO necesito asociar la parte del href despreciando así el valor contenido en title se desprecia, he probado a poner solo href="(.*?)"><span class="song">', 3) pero se lia bastante el código...
otra cosa que se me ocurrió fué
If StringLeft($linkCancion[$n], 7) <> "listen/" Then
$link = $linkCancion[$n + 1]
EndIf
pero es una chapuza que repite los links dobles y da un resultado erróneo...
Ayuda porfavor
Gracias!
Saludos!
ArkCrew
http://www.nodluna.blogspot.com
http://www.nodluna.blogspot.com
Re: Ayuda con StringRegExp en una web
arkcrew, ¿el resultado que buscas se obtiene con esto?
<a title=".*?" href="(.*?)"><span class="song">
Con las expresiones regulares, lo que tienes entre paréntesis es lo que te devuelve. Si el primer .*? lo dejas sin paréntesis, no te lo devolverá, aunque lo tiene en cuenta en la expresión a buscar.
Saludos.
<a title=".*?" href="(.*?)"><span class="song">
Con las expresiones regulares, lo que tienes entre paréntesis es lo que te devuelve. Si el primer .*? lo dejas sin paréntesis, no te lo devolverá, aunque lo tiene en cuenta en la expresión a buscar.
Saludos.
Re: Ayuda con StringRegExp en una web
Y si el enlace siempre empieza por listen, puedes poner:
listen/(.*?)"><span class="song">
y añadirele listen/ al asignar la variable.
$linkCancion = "listen/" & StringRegExp($html, 'listen/(.*?)"><span class="song">', 3)
listen/(.*?)"><span class="song">
y añadirele listen/ al asignar la variable.
$linkCancion = "listen/" & StringRegExp($html, 'listen/(.*?)"><span class="song">', 3)
- arkcrew
- Profesional del Autoit
- Mensajes: 506
- Registrado: 28 Sep 2009, 19:17
- Ubicación: Granada, España
- Contactar:
Re: Ayuda con StringRegExp en una web
Mushisimas gracias Jamaro, me funcionó a la perfección!!
Saludos
Saludos
ArkCrew
http://www.nodluna.blogspot.com
http://www.nodluna.blogspot.com
Re: Ayuda con StringRegExp en una web
jamaro escribió:Y si el enlace siempre empieza por listen, puedes poner:
listen/(.*?)"><span class="song">
y añadirele listen/ al asignar la variable.
$linkCancion = "listen/" & StringRegExp($html, 'listen/(.*?)"><span class="song">', 3)
Yo hice algo parecido con esto pero no me funciono, osea quiero listar todos los link que se encuentran dentro de una cadena. arrancan con "http://" y terminan con ".rar". Con eso no hay problema. Ahora el problema es que me borra el "http://" y el ".rar", probe agregando a la variable lo que falta, pero no me funciona, osea, no me devuelve ningun array.
Código: Seleccionar todo
$aArray = "http://" & StringRegExp("http://www.google.com.rar", "http://(.*?).rar", 3) & ".rar"
- Ximorro
- Profesional del Autoit
- Mensajes: 1500
- Registrado: 10 Jul 2009, 12:35
- Ubicación: Castellón, España
Re: Ayuda con StringRegExp en una web
No te devuelve ningún array porque el operador & no puede operar con arrays. Le estás diciendo que concatene una cadena con un array y eso no se puede hacer directamente.
Lo que podrías hacer es ir recorriendo el array y hacer la concatenación con todos los resultados, pero también se puede hacer directamente con la ER.
El problema es que al poner paréntesis a "(.*?)" estás diciendo que quieres capturar eso, por eso te ignora lo demás. Cuando quieres usar paréntesis pero no crear un grupo capturable se indica con ?:
Así queda:
http://(?:.*?)\.rar
Eso te devolverá todo, incluido el "http://" y el ".rar", no tienes que añadirlo a mano.
Por cierto, fíjate que el punto hay que escaparlo con "\", porque en ER un punto significa "cualquier carácter" y tú quieres expresamente el carácter punto.
Lo que podrías hacer es ir recorriendo el array y hacer la concatenación con todos los resultados, pero también se puede hacer directamente con la ER.
El problema es que al poner paréntesis a "(.*?)" estás diciendo que quieres capturar eso, por eso te ignora lo demás. Cuando quieres usar paréntesis pero no crear un grupo capturable se indica con ?:
Así queda:
http://(?:.*?)\.rar
Eso te devolverá todo, incluido el "http://" y el ".rar", no tienes que añadirlo a mano.
Por cierto, fíjate que el punto hay que escaparlo con "\", porque en ER un punto significa "cualquier carácter" y tú quieres expresamente el carácter punto.
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
Re: Ayuda con StringRegExp en una web
Esto si anda perfecto :) Muchas gracias!! y mas por las explicaciones ...Ximorro escribió:No te devuelve ningún array porque el operador & no puede operar con arrays. Le estás diciendo que concatene una cadena con un array y eso no se puede hacer directamente.
Lo que podrías hacer es ir recorriendo el array y hacer la concatenación con todos los resultados, pero también se puede hacer directamente con la ER.
El problema es que al poner paréntesis a "(.*?)" estás diciendo que quieres capturar eso, por eso te ignora lo demás. Cuando quieres usar paréntesis pero no crear un grupo capturable se indica con ?:
Así queda:
http://(?:.*?)\.rar
Eso te devolverá todo, incluido el "http://" y el ".rar", no tienes que añadirlo a mano.
Por cierto, fíjate que el punto hay que escaparlo con "\", porque en ER un punto significa "cualquier carácter" y tú quieres expresamente el carácter punto.
- Ximorro
- Profesional del Autoit
- Mensajes: 1500
- Registrado: 10 Jul 2009, 12:35
- Ubicación: Castellón, España
Re: Ayuda con StringRegExp en una web
De nada, me alegro de que sirvan las explicaciones porque lo mío me cuesta ponerlas, que a veces me enrollo que no veas
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)