Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > AutoIt
You last visited: Today at 02:11

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



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

Discussion on StringRegExp() -> Array is invalid. No matches ? within the AutoIt forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 15
Join Date: Jul 2009
Posts: 152
Received Thanks: 9
StringRegExp() -> Array is invalid. No matches ?

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.
assesino is offline  
Old 03/04/2013, 13:47   #2
 
lolkop's Avatar
 
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
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.
lolkop is offline  
Old 03/04/2013, 13:52   #3
 
elite*gold: 15
Join Date: Jul 2009
Posts: 152
Received Thanks: 9
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?
assesino is offline  
Old 03/04/2013, 14:38   #4
 
lolkop's Avatar
 
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
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)
lolkop is offline  
Thanks
1 User
Old 03/04/2013, 14:51   #5
 
elite*gold: 15
Join Date: Jul 2009
Posts: 152
Received Thanks: 9
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>'
assesino is offline  
Old 03/04/2013, 15:02   #6
 
lolkop's Avatar
 
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
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...
lolkop is offline  
Old 03/04/2013, 15:34   #7
 
elite*gold: 15
Join Date: Jul 2009
Posts: 152
Received Thanks: 9
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
assesino is offline  
Old 03/04/2013, 15:56   #8
 
lolkop's Avatar
 
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
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.
lolkop is offline  
Thanks
1 User
Old 03/04/2013, 16:50   #9
 
elite*gold: 15
Join Date: Jul 2009
Posts: 152
Received Thanks: 9
Gut, jetzt habe ich das Pattern verstanden. Das Pattern macht genau das, was ich wollte.
Thema erledigt!
assesino is offline  
Reply




All times are GMT +1. The time now is 02:13.


Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2026 elitepvpers All Rights Reserved.