webForumDet fria alternativet

RegExp flera värden

ASP

8 svar · 328 visningar · startad av nikkisixx

Medlem sedan nov. 20064 inlägg
Frågan#1
Dim objHTTP,strHTML,objRegExp,hittade,item

url = "http://blabla"
Set objHTTP = Server.CreateObject("Microsoft.XMLHTTP")
objHTTP.Open "GET", url , False
objHTTP.setRequestHeader "Content-type","text/html"
objHTTP.Send

strHTML=BinToText(objHTTP.responseBody,35000)

Set objHTTP = Nothing

Set RegExp = New regexp
RegExp.Global = true
RegExp.IgnoreCase = true
RegExp.Pattern = "<FONT class=""rubrik3"">(.*)</FONT>"

' Här vill jag även söka redan på raden
' RegExp.Pattern = "<FONT class=""rubrik2"">(.*)</FONT>"

Set hittade = RegExp.Execute(strHTML)

For each item in hittade
Response.Write ""& item.value &"<br>"
Next

Jag vill plocka ut flera värden ur källkoden samtidigt, helst skulle jag vilja plocka ut allt mellan <table></table> men (.*?) fungerar ej.

Medlem sedan dec. 20025 483 inlägg
#2

Hej och välkommen till wF!

För allt mellan <table> och </table>:

RegExp.Pattern = "<table>((?:.|\n)*?)</table>"
Medlem sedan nov. 20064 inlägg
#3

Tack Peter.
Får det inte att fungera, jag har provat detta tidigare men får felmeddelande.
Microsoft VBScript runtime error 800a139a

Vad jag har läst mig till verkar jag ha en för gammal version.

Medlem sedan dec. 20025 483 inlägg
#4

Det kanske går att skriva om på annat sätt. Vad kan förekomma mellan <table> och </table>?

Medlem sedan nov. 20064 inlägg
#5

Det vore ju en höjdare. Säg att tabellen ser ut såhär.

<table border="0" cellspacing="0" cellpaddning="3">
<tr style="background-color:#f2f2f2;">
<td valign="top" width="100">
<font class="text">Bla Bla</font>
</td>
</tr>
</table>

Medlem sedan dec. 20025 483 inlägg
#6

Om det bara finns en tabell i strHTML:

set re = new regexp
re.pattern = "<table[^>]*>((.|\n)*)</table>"
set m = re.execute(strHTML)
if m.count > 0 then
  response.write replace(m(0).submatches(0), "<", "&lt;")
end if
set re = nothing

Förekommer fler tabeller i strHTML blir ovanstående mindre bra, eftersom uttrycket kommer att ta med allt från den första tabellens <table> till den sista tabellens </table>.

Eftersom inte lazy quantifiers verkar stödjas kan det bli svårt att hämta ut allt mellan varje par av <table> och </table> med regex. I slutändan kanske det blir till att skriva en egen funktion som klarar biffen.

Red./ I och för sig är det ju alltid möjligt att explicit ange vilka element som får förekomma mellan tabelltaggarna.

Medlem sedan dec. 20025 483 inlägg
#7

Nu så:

set re = new regexp
re.global = true
re.pattern = "<table[^>]*>((\s*(<(tr|td|font)[^>]*>)\s*)*(\w|\s)*(</(tr|td|font)>\s*)*)"
set m = re.execute(strHTML)
for each item in m
  response.write replace(item.submatches(0), "<", "&lt;") & "<br>"
end if
set re = nothing

Kan andra element än 'tr', 'td' och 'font' förekomma är det bara att lägga till dem enligt mönstret ovan.

Medlem sedan nov. 20064 inlägg
#8

Tack för hjälpen Peter men får följande felmeddelande:

Object doesn't support this property or method: 'submatches'

Kan det vara så att vi har en äldre version installerad som inte stöder detta?

Medlem sedan dec. 20025 483 inlägg
#9

Ja, sannolikt är det så. Submatches stöds fr.o.m. version 5.5 av Windows Script.

Vill ni uppdatera kan följande länk vara till hjälp:
http://msdn.microsoft.com/library/default.asp?url=/downloads/list/webdev.asp

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