webForumDet fria alternativet

Hämta information från länkar

ASP

4 svar · 590 visningar · startad av oJones

Medlem sedan dec. 200154 inlägg
Frågan#1

Hej!

Jag har ett litet problem. Det är så att jag vill plocka ut länk samt beskrivning från en länksamling jag har.
Ur html-koden
<A HREF="http://www.webforum.nu">Besök webforum.nu</A> vill jag plocka ut
Url: http://www.webforum.nu
Beskrivning: Besök webforum.nu

Jag har försökt med Regular Expressions, men jag får inte till det.
Jag försökte till och med en variant av att leta upp första <A med hjälp av Instr och därefter leta upp efterkommande </A> och på så vis ta ut hela <A HREF="http://www.webforum.nu">Besök webforum.nu</A> med hjälp av mid. Hänger ni med? Problemet är när det kommer text varvat mellan urlarna typ.

Alltså, ur en html-kod (<p>Besök gärna <a href="http://www.webforum.nu">webforum.nu</a>, eller varför inte kika in på <a href="http://www.aftonbladet.se">aftonbladet.se</a></p>)
Vill jag hämta ut urlarna och beskrivningarna till länkarna.

Någon som har en lösning eller åtminstone kan ge mig en knuff åt rätt håll?

Medlem sedan jan. 20032 285 inlägg
#2
<%
Dim arrURL()
Dim arrDescription()
i = 0
strText = "Besök gärna <a href=""http://www.webforum.nu"">webforum.nu</a>, eller varför inte kika in på <a href=""http://www.aftonbladet.se"">aftonbladet.se</a>"

Set objRegExp = New RegExp

With objRegExp
  .Global = True
  .IgnoreCase = True
  .Pattern = "<a href=""[^>]+"">"

  For Each Match In .Execute(strText)
    ReDim Preserve arrURL(i)
    arrURL(i) = Mid(Match.Value, 10)
    arrURL(i) = Left(arrURL(i), Len(arrURL(i)) - 2)
    i = i + 1
  Next

  i = 0
  .Pattern = "<a href=""[^>]+"">[^<]+</a>"

  For Each Match In .Execute(strText)
    ReDim Preserve arrDescription(i)
    arrDescription(i) = Right(Match.Value, Len(Match.Value) - InStr(Match.Value, ">"))
    arrDescription(i) = Left(arrDescription(i), Len(arrDescription(i)) - 4)
    i = i + 1
  Next
End With

Set objRegExp = Nothing

For j = 0 To UBound(arrURL)
  Response.Write(arrURL(j) & " - " & arrDescription(j) & "<br>")
Next
%>
Medlem sedan dec. 200154 inlägg
#3

Du är duktig. Det tog mig hela dagen att inte ens komma i närheten =)

Koden i sig gör precis det jag efterfrågade, men det har tillstött lite problem.

Vissa av länkarna ser ut som följer:
strText = "<A HREF=""http://www.google.com"" CLASS=""link"">Länk till google</A>"

Eftersom CLASS=""link"" kan placeras både före och efter HREF= löste jag det genom att ändra ditt första pattern till:

.Pattern = "href=""[^>]+""."

Dessvärre gjorde det inte saken helt bra.

Ett annat problem jag upptäckt är länkar som har en bild:
strText = "<A HREF=""http://www.google.com"" CLASS=""link""><IMG SRC="bild.gif"></A>"

Jag lyckas verkligen inte med mina egna patterns =/

Medlem sedan jan. 20032 285 inlägg
#4

Så här då?

<%
Dim arrURL()
Dim arrDescription()
i = 0
strText = "Besök gärna <a href=""http://www.webforum.nu"" class=""blabla""><img src=""bla.gif""></a>, eller varför inte kika in på <a href=""http://www.aftonbladet.se"">aftonbladet.se</a>"
Response.Write("strText = " & Server.HTMLEncode(strText) & "<br><br>")

Set objRegExp = New RegExp

With objRegExp
  .Global = True
  .IgnoreCase = True
  .Pattern = "href=""[^""]*"""

  For Each Match In .Execute(strText)
    ReDim Preserve arrURL(i)
    arrURL(i) = Mid(Match.Value, 7)
    arrURL(i) = Left(arrURL(i), Len(arrURL(i)) - 1)
    i = i + 1
  Next

  i = 0
  .Pattern = "<a[^>]*>[\w|<img src="".*"">]*</a>"

  For Each Match In .Execute(strText)
    ReDim Preserve arrDescription(i)
    arrDescription(i) = Right(Match.Value, Len(Match.Value) - InStr(Match.Value, ">"))
    arrDescription(i) = Left(arrDescription(i), Len(arrDescription(i)) - 4)
    i = i + 1
  Next
End With

Set objRegExp = Nothing

For j = 0 To UBound(arrURL)
  Response.Write(arrURL(j) & " - " & arrDescription(j) & "<br>")
Next
%>
Medlem sedan dec. 200154 inlägg
#5

Jag accepterar det som rätt svar.. fast jag hittade en bugg som är jäkligt irriterande =)

<link rel="icon" href="http://url.com/logo.png" type="img/png">

Den gör att scriptet "hittar fel" och brakar så småningom tillsammans.. testa att köra mot https://www.susning.nu eller www.aftonbladet.se.

Det klarar sig nog ändå..
Tack ska du ha sebbe! Underbar hjälp!

289 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
146 ms — deklarationer (db)
0 ms — hämta statistik (cache)
140 ms — hämta tråd, inlägg och bilagor (db)
146 ms — ändringar (db)