StringRegExp Problem ...

04/11/2011 19:22 Centaro#1
Moin,
Ich hab ein kleines Problem...
Und zwar habe ich dies:

HTML Code:
<td>Level:</td>
						<td>30</td>
Als testdatei zum auslesen unter test.html gespeichert.
Ich möchte den Wert zwischen <td></td> auslesen.
Hierfür habe ich diesen Code:

PHP Code:
$Sourcecode FileRead ( @ScriptDir "test.html" )
            
$text    StringRegExp $Sourcecode'(?i)(?s)<td>\s*?(\d*?)\s*?</td>'3)
            if 
not @error then MsgBox 0""$text
Dieser liest jedoch scheinbar es nicht richtig aus...
Wenn ich hingegen den Quellcode der html datei direkt im Autoitscript angebe, bekomme ich die Antwort 30 so wie es sein soll...

Weiß jemand wie ich das machen kann das ich trotzdem aus einer Datei auslesen kann?
04/12/2011 19:04 TrickGamer#2
Ich kenne mich zwar nicht gut mit StringRegExp aus aber du hast bei "FileRead"
das "\" vergessen (FileRead ( @ScriptDir & "\test.html" )
naja wenn das immer noch nicht funktioniert:
PHP Code:
$Fileread=FileReadLine(@ScriptDir "\test.html",1)
$ausgabe=_Text($Fileread,"<td>","</td>")
MsgBox(0,"test",$ausgabe)

Func _Text($text,$von,$bis)
$count1=StringLen($text)
$count2=StringLen($von)
$count3=StringLen($bis)
$left=StringLeft($text,$count1-$count3)
$Right=StringRight($left,$count1-$count3-$count2)
Return 
$Right
EndFunc 
vg
04/12/2011 21:09 lolkop#3
TrickGamer das is ne äusserst schlechte methode die du da nutzt...

für die regexp funktionen solltest du wissen das gruppen automatisch ausgegeben werden.

gucken wir uns deine pattern an
Code:
(?i)(?s)<td>\s*?(\d*?)\s*?</td>
das (?i) is in dem falle eine sehr gute idee weil es das ganze deutlich beschleunigt =)

allerdings is das einzige was du ausgeben willst ja die 30. diese befindet sich hinter dem level

also wäre die beste methode das level fest mit zu integrieren... etwa so:
Code:
(?i)(?s)<td>Level:</td>.*?<td>(\d+)</td>
sollte der "Level:" string noch variieren, einfach durch \s+ ersetzen =)