webForumDet fria alternativet

regexp

12 svar · 322 visningar · startad av KalsongCesar

KalsongCesarMedlem sedan mars 2001339 inlägg
#1

... jag får inte till det.

jag vill hämta ut data från en tabell.. och har hämtat in hela med xmlhttp men jag vill bara ha ut datat som ligger mellan '<TR>' och '</TR>' när mitt vilkor är uppfyllt som är ett datum. Tex maj-2002

Alternativt att jag vill hämta in data från första och andra tabellrutan i hela tabellen.

vill ha allt inom ** =)

<Table>
<TR><TD>*Maj-2002*</TD><TD>*data*</TD><TD></TD></TR>
<TR><TD>*Jun-2002*</TD><TD>*data*</TD><TD></TD></TR>
<Table>

använder följande lilla tjofräs

Set objHTTP = Server.CreateObject("Microsoft.XMLHTTP")
objHTTP.Open "GET", "www.mintabell.asp", False

objHTTP.Send

strHTML=objHTTP.responseText
'Response.write strHTML
Set objHTTP = Nothing

Set objRegExp = New regexp
objRegExp.Global = TRUE
objRegExp.IgnoreCase = true
patt= "????????"
Response.write objRegExp.Test(patt) & "<br>"
objRegExp.Pattern = patt
Set hittade = objRegExp.Execute(strHTML)

For each item in hittade
  Response.Write "Plats " & item.firstIndex & " Inehåller " & item.Value & "<br>"
Next
tohaMedlem sedan dec. 1999707 inlägg
#2

Metoden Test() ska ha strängen som ska genomsökas som första argument och inte det reguljära uttrycket. Testa alltså med:

objRegExp.Pattern = patt
objRegExp.Test(strHTML) & "<br>"
KalsongCesarMedlem sedan mars 2001339 inlägg
#3

ok, vad jag hade läst så skulle den bara returnera true eller fals beroende på om min fråga uppfyllde ngr svar..

Men det är Patt som jag har problem med, men jag kan ju testa mer nu när jag vet hur test ska slipas

tohaMedlem sedan dec. 1999707 inlägg
#4

Verkar funka:

Set objRegExp = New regexp
objRegExp.Global =		True
objRegExp.IgnoreCase =	True
patt =					"<tr><td>([a-zåäö]{3,4}\-\d{4})</td><td>(.*?)</td><td></td></tr>"
objRegExp.Pattern =		patt
Set Matches = objRegExp.Execute(strHTML)

For each Match in Matches
	Response.Write "Plats " & Match.firstIndex & " Inehåller '" & Server.HTMLEncode(Match.Value) & "'<br>"
	Response.Write "Submatches:<br>"
	For Each SubMatch in Match.submatches
	  Response.Write "&nbsp;&nbsp;-&nbsp;'" & SubMatch & "'<br>"
	Next
Next
KalsongCesarMedlem sedan mars 2001339 inlägg
#5

funkar fint med ([a-zåäö]{3,4}\-\d{4}) för att få ut mina datum =)

men saken är den att tabellen är inte så enkelt uppbyggd som jag tidigare visade så det gör det lite mer komplicerat.. tr och tr inhåller formateringar som kan skilja sig.. med färg och storlek..

skulle behöva kolla att rad mellan <TR.....> och </TR> och där få ut data mellan
</td.....>***</TD>

går det? Jag håller på och lär mig de där formateringarna men det ser ut som grekiskan när jag meckar och ingen felrapport får man direkt heller.

tohaMedlem sedan dec. 1999707 inlägg
#6

Då torde uttrycket bli som följer:

patt = "<tr.*?><td.*?>([a-zåäö]{3,4}\-\d{4})</td><td.*?>(.*?)</td><td.*?></td></tr>"
tohaMedlem sedan dec. 1999707 inlägg
#7

Kanske bättre om du skickar hur din html-kod ser- eller får se ut.

KalsongCesarMedlem sedan mars 2001339 inlägg
#8

Naturligtvis.. ska ni få se koden.
Så här ser en rad ut i tabellen..

<tr bgcolor="#ffffff"> 
          <td width="75"><font face="verdana" size="2">Maj-2002</font></td>
          <td align="right"><font face="verdana" size="2">890</font></td>
          <td align="right"><font face="verdana" size="2">61.25</font></td>
          <td align="right"><font face="verdana" size="2"><font color='red'>-0.50</font></font></td>
          <td align="right"><font face="verdana" size="2">62.00</font></td>
          <td align="right"><font face="verdana" size="2">61.25</font></td>
          <td align="right"><font face="verdana" size="2">61.75</font></td>
          <td align="right"><font face="verdana" size="2">38</font></td>
          <td align="right"><font face="verdana" size="2">&nbsp;</font></td>

        </tr>

det är en massa fonter och sånt som mekar till det..

Bra funktion den här regexp men jag kan inte behärska den bara

:l

KalsongCesarMedlem sedan mars 2001339 inlägg
#9

får

Server object error 'ASP 0177 : 800a139a' 

Server.CreateObject Failed 

/briefcase/briefcase_update/update.asp, line 18 

The operation completed successfully.

när jag kör bara <tr.*?>

:q

tohaMedlem sedan dec. 1999707 inlägg
#10

Nja, det vet jag inte varför det blev en sån felkod. Jag vet ju att
du måste ha nya versionen av VBScript-Engine, 5.6 tror jag det
är. För att få "non-greedy matches", dvs "*?", att fungera men
ett sånt fel borde ju inte bero på det. Har nog hittat ditt uttryck
som du söker. Långt blev det. :)

Set objRegExp = New regexp
objRegExp.Global =		True
objRegExp.IgnoreCase =	True
patt =					"<tr.*?>[ \s]*?<td.*?>(?:<.*?>)*([a-zåäö]{3,4}\-\d{4})(?:</.*?>)*?</td>[ \s]*?<td.*?>(?:<.*?>)*(.*?)(?:<.*?>)*?</td>[ \s]*?<td.*?>(?:<.*?>)*(.*?)(?:<.*?>)*?</td>[ \s]*?<td.*?>(?:<.*?>)*(.*?)(?:<.*?>)*?</td>[ \s]*?<td.*?>(?:<.*?>)*(.*?)(?:<.*?>)*?</td>[ \s]*?<td.*?>(?:<.*?>)*(.*?)(?:<.*?>)*?</td>[ \s]*?<td.*?>(?:<.*?>)*(.*?)(?:<.*?>)*?</td>[ \s]*?<td.*?>(?:<.*?>)*(.*?)(?:<.*?>)*?</td>[ \s]*?<td.*?>(?:<.*?>)*(.*?)(?:<.*?>)*?</td>"
objRegExp.Pattern =		patt
Set Matches = objRegExp.Execute(strHTML)

For Each Match in Matches
	Response.Write "Plats " & Match.firstIndex & " Inehåller '" & Server.HTMLEncode(Match.Value) & "'<br>"
	Response.Write "Submatches:<br>"
	For Each SubMatch in Match.submatches
	  Response.Write "&nbsp;&nbsp;-&nbsp;'" & Server.HTMLEncode(SubMatch) & "'<br>"
	Next
Next
KalsongCesarMedlem sedan mars 2001339 inlägg
#11

Tack.. hehe, jo blev det långt. Men det är nog den där *? som ställer till det... får error =(. var hittar jag senaste verionen av vbscript engine, följer den inte med i sp för iis?

Min rad som jag fick till men som bara tar en rad av den raden jag vill ha blev

patt= "<td.*>[a-zåäö]{3,4}\-\d{4}.*</td>"

men när jag lägger till \s för att få med en radbrytning och börja på nästa rad så vill den inte det.

dags för lite lunch :bire

tohaMedlem sedan dec. 1999707 inlägg
KalsongCesarMedlem sedan mars 2001339 inlägg
#13

Tackar.. nu fungerar det som det ska.. behövde tydligen 5.6 installerad för att den skulle fatta =)

125 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
122 ms — hämta tråd, inlägg och bilagor (db)