StringRegExp Problem

04/23/2011 18:04 BlackHybrid#1
Hallo Elitepvpers,

ich habe zurzeit ein Problem mit StringRegExp. Undzwar habe ich den String
PHP Code:
title="Holzfäller Stufe 0" shape=CIRCLE alt="Holzfäller Stufe 0" coords=101,33,28 href="build.php?id=1" 
und möchte gerne den Titel auslesen wobei href dabei hilft das richtige zu finden, da sich das ganze 18 mal wiederholt (build.php?id=1 bis build.php?id18). In href setze ich ebenfalls 'build.php?id=' & $i & '"' ein. Allerdings gibt es nun ein Problem undzwar gibt er immer nur den Titel von der ersten Stelle, die im Quelltext vorkommt zurück wenn ich für href .*? einsetze. Wenn ich nichts einsetze kommt immer eine Fehlermeldung. Soweit ich sehe liegt das am ? im Link.
Und jetzt meine Frage was muss ich für den Link einsetzen, dass der Link bis zur Zahl ignoriert wird, die ich die mittels der Variable einsetze.
04/23/2011 19:16 ZeraPain#2
was genau willst du jetzt auslesen?
den titel? was hat der mit href zu tun.
oder willst du die ID auslesen?
04/23/2011 19:35 BlackHybrid#3
Ich will den Titel auslesen. Und da das objekt 18 mal existiert und man die ambesten mithilfe des hrefs ermitteln kann möchte ich href benutzen nur eben, dass die zahl am ende mit einer Variable ersetzt wird.(Befindet sich in einer For schleife) Nur gibt es jetzt noch ein anderes Problem undzwar ist das ? ja eigentlich ich sag jetzt mal ein Befehl und somit kann ich den Link so nicht stehen lassen, da er sonst nicht mit dem Quelltext übereinstimmt.
04/23/2011 19:46 lolkop#4
lies doch einfach alle in ein array, inklusive der id :s
04/23/2011 20:02 BlackHybrid#5
Kann man nicht den Link bis zur Zahl ersetzten mit was änlichem wie ".*?" weil ich wollte dann in die For schleife noch eine If abfrage einbauen, ob es sich um Holzfäller oder Eisenmine handelt oder so und dann gleich mit GuiCtrlSetData den wert eines Controls das eben auch aus einem Array besteht und ich das ganze dann kurz und einfach gelöst hätte.

Wenn nicht löse ich das ganze halt per Umwege.
04/23/2011 20:07 lolkop#6
verstehe nicht warum du eine schleife bauen willst, wenn du doch alles aufeinmal in ein array einlesen kannst...

Code:
$regExp = StringRegExp($string, 'title="(.+?)" .*? href="build.php\?id=(\d+)"', 4)
das würde dir beispielsweise ein array von arrays ausgeben, welche jeweils name mit build-id beinhalten.

man kann das ganze natürlich auch sehr kompliziert über mehrere schleifen laufen lassen.
ich jedoch bevorzuge eigentlich immer den leichtesten weg :s
04/23/2011 20:25 BlackHybrid#7
Ich schau mir das gleich mal genauer an. Aber eigentlich habe ich nur den Backslash vor dem ? gesucht. Aber mal eine andere Frage warum gibt er mir hier
PHP Code:
$string '<AREA title="Holzfäller Stufe 0" shape=CIRCLE alt="Holzfäller Stufe 0" coords=101,33,28 href="build.php?id=1"><AREA title="Getreidefarm Stufe 0" shape=CIRCLE alt="Getreidefarm Stufe 0" coords=165,32,28 href="build.php?id=2">'
for $i 1 to 2
$class 
StringRegExp($string'title="(.*?)" shape=CIRCLE alt=".*?" coords=.*? href="build.php\?id='&$i&'"'1)
ConsoleWrite($class[0]&@CRLF)
next 
immer nur Holzfäller Stufe 0 zurück?
04/23/2011 20:30 lolkop#8
weil das immer vorne steht? :o

ich mein du suchst schließlig "a .*? b"

obs da nu a .*? c .*? b gibt oda nich is egal^^ es wird immer a ausgegeben weils vor b steht. alles dazwischen ignorierst du ja einfach...

wie gesagt wenn du es umständlich über schleifen machen willst haste da schon mehr probleme bei...

am einfachsten wäre es einfach alles auf einmal einzulesen.
04/23/2011 20:41 BlackHybrid#9
Achso ok vielen Dank.
Endlich kann ich weiter machen ;)
Ist aber eigentlich blöd dasses nicht so klappt.
04/23/2011 20:57 lolkop#10
Quote:
Originally Posted by BlackHybrid View Post
Achso ok vielen Dank.
Endlich kann ich weiter machen ;)
Ist aber eigentlich blöd dasses nicht so klappt.
klappen würde es, wenn du das ganze etwas kleverer aufbaust.

allerdings ist regexp dafür konzipiert, einmal die engine zu starten, um damit einen großen string am stück zu parsen.
wenn du das ständig für kleine stückchen des strings wiederholen würdest, hättest du dabei einen riesen effizienzverlust...
04/23/2011 21:00 ZeraPain#11
Code:
$string = '<AREA title="Holzfäller Stufe 0" shape=CIRCLE alt="Holzfäller Stufe 0" coords=101,33,28 href="build.php?id=1"><AREA title="Getreidefarm Stufe 0" shape=CIRCLE alt="Getreidefarm Stufe 0" coords=165,32,28 href="build.php?id=2">'

$count = 1
While 1
	$tmp = StringInStr($string, "title=", True, True, $count)
	If $tmp == 0 Then
		ExitLoop
	Else
		$out = StringRegExp(StringMid($string, $tmp), 'title="(.*?)"', 1)
		$count = $tmp + 6
		ConsoleWrite($out[0] & @CRLF)
	EndIf
WEnd