StringRegExp() -> Array is invalid. No matches ?

03/04/2013 13:40 assesino#1
Hallo, ich versuche folgendes zu suchen:

Code:
$string = '<span id="pkt">70</span></span>'
$search = StringRegExp($qc,'<span id="pkt">(\w+)</span></span>',3)
Msgbox(0,"Ausgabe",$search[0])
Es soll also die Zahl 70 zurückgegeben werden, jedoch kommt eine 1, was für "Array is invalid. No matches" steht. Ich denke es liegt vielleicht an den "", die im $string vorkommen, vielleicht denkt er da, das der Text aufhört bzw. anfängt. Ich habe aber nichts gefunden, was man da macht. Was ist da falsch?

Edit (Danke an lolkop): $qc muss natürlich $string sein, da habe ich beim kopieren aus dem Quelltext was falsch gemacht. Anführungszeichen bei Msgbox $search[0] entfernt.
03/04/2013 13:47 lolkop#2
Quote:
Originally Posted by assesino View Post
Hallo, ich versuche folgendes zu suchen:

Code:
$string = '<span id="pkt">70</span></span>'
$search = StringRegExp($qc,'<span id="pkt">(\w+)</span></span>',3)
Msgbox(0,"Ausgabe","$search[0]")
Es soll also die Zahl 70 zurückgegeben werden, jedoch kommt eine 1, was für "Array is invalid. No matches" steht. Ich denke es liegt vielleicht an den "", die im $string vorkommen, vielleicht denkt er da, das der Text aufhört bzw. anfängt. Ich habe aber nichts gefunden, was man da macht. Was ist da falsch?
1. dein regulärer ausdruck wird nicht auf $string angewendet
2. für ziffern benutzt man "\d" nicht "\w"
3. manche zeichen müssen mit einem break (\) versehen werden, das sie ebenfalls eine bedeutung in regulären ausdrücken haben.
03/04/2013 13:52 assesino#3
1. Ja das $qc muss natürlich $string sein und bei der Messagebox müssen die Anführungszeichen bei $search[0] weg, trotzdem kommt der Fehler
2. \w sollte auch gehen, weil es auch Zeichen von 0-9 sucht
3. Welche Zeichen sind das denn?
03/04/2013 14:38 lolkop#4
Code:
$string = '<span id="pkt">70</span></span>'
$search = StringRegExp($string,'<span id="pkt">(\d+?)<\/span>',1)
if IsArray($search) Then ConsoleWrite($search[0]&@CRLF)
03/04/2013 14:51 assesino#5
Problem gefunden: Der Quelltext von mir funktioniert im Prinizip. Es kam jedoch die Zahl 145.123 im meinem Testdurchlauf vor. Es ist also ein Punkt dazwischen, da kann man offensichtlich nicht \w oder \d verwenden.

Edit: Da stellt sich jetzt nur die Frage, wie ich das mache, wenn die Zahl variabel ist, also mit Punkt oder ohne Punkt sein kann. Also z.B:
$string = '<span id="pkt">70</span></span>'
oder
$string = '<span id="pkt">70.000</span></span>'
03/04/2013 15:02 lolkop#6
Quote:
Originally Posted by assesino View Post
Problem gefunden: Der Quelltext von mir funktioniert im Prinizip. Es kam jedoch die Zahl 145.123 im meinem Testdurchlauf vor. Es ist also ein Punkt dazwischen, da kann man offensichtlich nicht \w oder \d verwenden.
in dem falle wäre wohl ([\d.]+?) das beste pattern für dich...
03/04/2013 15:34 assesino#7
Danke, das funktioniert. Wie kann man das Pattern verstehen? Es könnte nämlich eventuell auch die Zahl mit zwei Punkten vorkommen -> Bsp: 144.133.122
03/04/2013 15:56 lolkop#8
Quote:
Originally Posted by assesino View Post
Danke, das funktioniert. Wie kann man das Pattern verstehen? Es könnte nämlich eventuell auch die Zahl mit zwei Punkten vorkommen -> Bsp: 144.133.122
reguläre ausdrücke sind immer in 3 schritten aufgebaut
<zeichen><wiederholungen><besonderes>

zugelassene zeichen werden immer in eckigen klammern angegeben, sobald mehr als nur eines infrage kommt... für eine liste von vorgefassten shortcuts kannste mal in die hilfe schauen

wiederholungen werden in geschweiften klammern angegeben {<von>,<bis>}... alternativ gibt es auch offene intervalle (zb {3,} == mindestens 3 matches), oder halt die abkürzungen * (== {0,}) und + (=={1,})...

besonderes kann zb wie von mir benutzt ein ? sein, welches dafür sorgt, das immer der kleinste treffer ausgegeben wird und nicht wie normal der größte.
03/04/2013 16:50 assesino#9
Gut, jetzt habe ich das Pattern verstanden. Das Pattern macht genau das, was ich wollte.
Thema erledigt!