webForumDet fria alternativet

patternproblem regexp

ASP

6 svar · 419 visningar · startad av Tottemannen

Medlem sedan sep. 200620 inlägg
Frågan#1

Jag har en tabell på en sida som jag vill läsa ut namnen och antal på.

<TABLE class=3Dcoolmenu>
  <TBODY>
  <TR>
    <TD class=3Dleft>
      <SPAN class=3Dbold> Kalle </SPAN> 8 st
      <BR>
      <SPAN=20 class=3Dbold >Nisse </SPAN> -5 st
      <BR>
      <SPAN =class=3Dbold> Ville </SPAN> 12 st
      <BR>
      <SPAN class=3Dbold> Valle = </SPAN> 99%
      <BR>
    </TD>
    <TD class=3Dright> <SPAN class=3Dtemp> + 4 </SPAN>
    <BR>
    <IMG src=bla bla> 
    </TD>
    </TR>
    </TBODY>
    </TABLE>

Har använt koden nedan. Frågan är vad patternmkoden ska vara. Har provat med massa alternativ men det blir fel, antingen en felkod eller en "vit" sida.

Set objHTTP = Server.CreateObject("MSXML2.XMLHTTP")
objHTTP.Open "GET","URL", False

objHTTP.Send
strHTML=objHTTP.responseText
Set objHTTP = Nothing

With New RegExp
.Global = false
.IgnoreCase = true
.Pattern = "<table class=3Dcoolmenu> ????????</table>"
Set hittade = .Execute(strHTML)
End With

For each item in hittade

Response.Write item.value & ""

Next

Set hittade = Nothing

Nån som har ett förslag??

Medlem sedan juni 20019 519 inlägg
#2
.Pattern = "<table class=3Dcoolmenu>([\S\s]+)</table>"
Medlem sedan sep. 200620 inlägg
#3

Tack för svaret.
Jag har provat, men det blir bara vitt på sidan.

Jag har provat med <table>.*</table>, då fungerar det, men alla tabeller på sidan visas. Så fort jag använder <table class=""3Dcoolmenu"">.*</table> så fungerar det inte. Nån som har en aning om varför det inte fungerar då?

Medlem sedan dec. 20025 483 inlägg
#4

Din HTML har på vissa ställen tecken där sådana inte bör finnas, t.ex. "<SPAN=20 class=3Dbold >". Med följande uppstädade HTML:

<TABLE class=3Dcoolmenu>
  <TBODY>
  <TR>
    <TD class=3Dleft>
      <SPAN class=3Dbold> Kalle </SPAN> 8 st
      <BR>
      <SPAN class=3Dbold>Nisse </SPAN> -5 st
      <BR>
      <SPAN class=3Dbold> Ville </SPAN> 12 st
      <BR>
      <SPAN class=3Dbold> Valle = </SPAN> 99%
      <BR>
    </TD>
    <TD class=3Dright> <SPAN class=3Dtemp> + 4 </SPAN>
    <BR>
    <IMG src=bla bla> 
    </TD>
    </TR>
    </TBODY>
    </TABLE>

...och följande ASP-kod:

Set objHTTP = Server.CreateObject("MSXML2.XMLHTTP")
objHTTP.Open "GET","http://localhost/tmp.asp", False

objHTTP.Send
strHTML=objHTTP.responseText
Set objHTTP = Nothing

dim hittade

With New RegExp
.Global = false
.IgnoreCase = true
.Pattern = "<table class=3Dcoolmenu>(?:(?:.|\s)*?)</table>"
Set hittade = .Execute(strHTML)
End With

if hittade.count <> 0 then
  dim s
  s = hittade(0)
  set hittade = nothing
  with new regexp
   .global = true
   .ignorecase = true
   .pattern = "<span class=3dbold>(.*?)</span>\s*((?:.|\s)*?)<br>"
   set hittade = .execute(s)
  end with
  for i = 1 to hittade.count
    response.write "[" & (i-1) & "]: name = " & hittade(i-1).submatches(0) & ", count = " & hittade(i-1).submatches(1) & "<br>"
  next
end if

...får jag:

[0]: name = Kalle , count = 8 st
[1]: name = Nisse , count = -5 st
[2]: name = Ville , count = 12 st
[3]: name = Valle = , count = 99%
Medlem sedan sep. 200620 inlägg
#5

Tack för svaret!
Sidan jag hämtar värdena ur ser ut som jag beskrev, och jag kan alltså inte städa upp HTML.
Jag fick det tyvärr inte att fungera.

Jag har dock en annan fråga, jag försöker att hämta ett klockslag ur följande kod:

<td>
<img src="bla bla alt="bla bla""/> 
08:44
</td>

och använder koden:

<%

Set objHTTP = Server.CreateObject("MSXML2.XMLHTTP")

objHTTP.Open "GET","URL", False

objHTTP.Send
strHTML=objHTTP.responseText
Set objHTTP = Nothing

Set objRegExp = New regexp
objRegExp.Global = true
objRegExp.IgnoreCase = true
objRegExp.Pattern = "<td>.*</td>"
Set hittade = objRegExp.Execute(strHTML)

  Set hittade = objRegExp.Execute(strHTML)
  
  Response.Write "" & hittade(1) & "<br>"
  
%>

Svaret blir en tom ruta där bilden skulle vara och efter den kommer klockslaget.
Hur ska regexp pattern se ut för att "bilden" inte ska komma med, utan bara klockslaget?
Har läst om regexp pattern på diverse sidor men har inte koll på hur det ska vara.

Medlem sedan dec. 20025 483 inlägg
#6

Exempel:

With New RegExp
.Global = false
.IgnoreCase = true
.Pattern = "<td>\s*<img[^>]+>\s*([^\s]*?)\s*</td>"
Set hittade = .Execute(strHTML)
End With

If hittade.count > 0 then
  response.write hittade(0).submatches(0)
end if
Medlem sedan sep. 200620 inlägg
#7

Tack igen för svaret!

Nu ytterligare en fråga.
Finns det någon syntax för att kunna visa bilder från en annan sida? När man använder regexp blir det ju bara en ram där bilden skulle vara. Vad jag förstår så används regexp bara till text.

264 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
127 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)
129 ms — ändringar (db)