StringRegExp funktioniert nicht bei Array?

  • Hallo Leute,

    ich habe die letzten Tage sehr viel mit RegEx gearbeitet in AutoIT.
    Nur leider komme ich bei einer Sache nicht auf meinen Fehler.

    [autoit]


    $i=0
    $i=_ArraySearch($htmlarray," <br> <br> <br> <br> <br>")
    $i=$i+1
    $offernoline=$htmlarray[$i]
    $offernolinen=StringRegExp($offernoline,".*",3)

    [/autoit]

    $offernoline und $offernolinen habe ich dim $offernoline und dim $offernoline oben deklariert.

    Wenn ich jetzt eine MsgBox ausgeben lasse, wie MsgBox(0,"",$offernoline), gibt er mir auch die Zeile aus dem Array wieder, die ich haben wollte <b> test <b> <br> ... zB

    Lasse ich ihne aber $offernolinen ausgeben, bekomme ich einen Error obwohl ich Pattern ".*" drin habe, sollte er doch das Gleiche anzeigen aus Testgründen ?

    Danke

    Einmal editiert, zuletzt von AutoITboy (6. September 2010 um 10:29)

  • Äm du müsstest schon einen String angeben.

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    ^^

    [/autoit]


    Natürlich müsstest du das dann in einer Schleife machen.

    Spoiler anzeigen
    [autoit]


    for $x = 0 to (Ubound($offernoline)-1)
    $offernolinen=StringRegExp($offernoline[$x],".*",3)
    Msgbox(0,"",$offernolinen)
    Next

    [/autoit]

    MfG
    Der_Doc

  • Also im Grunde ist es ganz einfach...
    Hier ist ein kleines Filterbeispiel, bei dem zwischen "<br> <br>" und "<br> <br>" in einer gemeinsamen Zeile der gesuchte Text steht:
    (Es geht natürlich auch ohne _ArraySearch, aber zur Verdeutlichung, dass es auch mit Arrays klappt, ist dies nun implementiert)

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    Local $htmltext, $htmlarray, $index, $regexp
    $htmltext = "<html>" & @CR & "<head>" & @CR & "<title> Stringregexp-Filter </title>" & @CR & "</head>" & @CR & "<body>" & @CR & _
    "Hallo Welt!" & @CR & "<br> <br>Text<br> <br>" & @CR & "Noch mehr Text..." & @CR & "</body>" & @CR & "</html>"
    MsgBox(0, "HTML-Text", $htmltext)
    $htmlarray = StringSplit($htmltext, @CR)
    _ArrayDisplay($htmlarray, "Html-Array"); Anzeige des Arrays
    $index = _ArraySearch($htmlarray, "<br> <br>", 0, 0, 0, 1); Sucht die Arrayitems nach "<br> <br>" ab
    MsgBox(0, "Arrayitem mit Index: " & $index, $htmlarray[$index])
    $regexp = StringRegExp($htmlarray[$index], "<br>\s<br>(.+)<br>\s<br>", 3); Sucht zwischen "<br> <br>" und "<br> <br>" alle Zeichen
    _ArrayDisplay($regexp, "Wert zwischen <br> <br> UND <br> <br>"); Zeigt die gefundenen Zeichen an

    [/autoit]

    Wer immer nur das tut, was er bereits kann - wird auch immer nur das bleiben, was er bereits ist!

  • Hi,

    es funktioniert ja auch wenn ich das HTML array ansteurere und StringRegExp mache.
    zB. $test=htmlarray[66]
    $test1 = StringRegExp($test ... )

    aber, wenn ich mit _arraysearch $i definiert habe, und dann sage $i = $i+1 und dann StringRegExp($htmlarray[i] ... )
    geht es nicht!

  • und dann sage $i = $i+1 und dann StringRegExp($htmlarray ... )


    Warum willst du den Index der gefundenen Zeile erhöhen?
    Das ist dann logischerweise die Zeile nach " <br> <br> <br> <br> <br>".
    Wenn du StringRegExp($offernoline,".*",3) ausgibst, solltest du den Inhalt von
    $htmlarray[$i] erhalten.
    Das es für mich nicht so plausibel erscheint, wäre es gut, wenn du vielleicht das Problem schilderst
    oder das, was du später haben willst (mit kleinem Beispielhtmlcode).

    Wer immer nur das tut, was er bereits kann - wird auch immer nur das bleiben, was er bereits ist!