webForumDet fria alternativet

patternproblem regexp

6 svar · 417 visningar · startad av Tottemannen

TottemannenMedlem sedan sep. 200620 inlägg
#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??

voigtann1Medlem sedan juni 20018 810 inlägg
#2
.Pattern = "<table class=3Dcoolmenu>([\S\s]+)</table>"
TottemannenMedlem 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å?

Peter SMedlem sedan dec. 20025 484 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%
TottemannenMedlem 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.

Peter SMedlem sedan dec. 20025 484 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
TottemannenMedlem 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.

Genererad på 384 ms · cache AV · v20260730165559-full.f96bc7eb