RegEx + Arrays

  • Hallo,

    ich erhalte mit RegEx mehrere Infos in einer Zeile:

    [autoit]


    Dim $aAuswahl
    $aAuswahl = StringRegExp($sSource,'<a\sclass="vip"\shref="(.*?)">(.*?)</a>',3)

    [/autoit]


    also mehrere Felder
    1. Feld = (.*?)
    2. Feld = (.*?)...

    Wie kann ich mir die Felder anzeigen lassen?
    ich meine irgendwie so:

    Spoiler anzeigen


    1. Feld1 | Feld2
    2. Feld1 | Feld2


    Grüße
    Ilse ;)

    Einmal editiert, zuletzt von Ilse (21. Juni 2011 um 14:37)

  • Mit

    [autoit]

    _ArrayToString($array,"|")

    [/autoit]

    so modifizieren das es direkt in die Listbox/View kann?
    Ansonsten _ArrayDisplay meinst Du ja wohl nicht, oder?

    Gruß Dietmar

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o

    • Offizieller Beitrag

    Jede Klammer erstellt eine Backreferenz (Ergebnis) und in der Reihenfolge des Auftretens werden diese Werte in ein Array geschrieben.
    Wenn also jede Backreferenz befüllt wird sieht dein Array so aus:
    Index 0 = Backreferenz 1 - erstes Auftreten
    Index 1 = Backreferenz 2 - erstes Auftreten
    Index 2 = Backreferenz 1 - zweites Auftreten
    Index 3 = Backreferenz 2 - zweites Auftreten
    ... usw.
    Ist jedoch ein Pattern als optional gesetzt (kann auftreten, muß nicht) und es wird kein Wert gefunden, paßt diese Zuordnung nicht mehr.

  • Morgen Dietmar,

    ja, das Ziel ist daß das alles in die Listview kommt,
    und daß man den Link anklicken kann.
    Also kleine Listview mit 20 Namen und Adressen
    Davon bin ich aber noch weit entfernt. :(

    Ich erhalte nun die beiden Felder mit RegEx
    Name und Webadresse

    Spoiler anzeigen


    Tiername|Link
    Name | Linkadresse
    Name | Linkadresse

    und das müsste je Zeile in die Listview...huh..

    Liebe Grüße
    Ilse ;)

  • Hallo Bugfix,

    noch ne Frage zu der Syntax ( das hab ich noch nicht verstanden)
    Also mein RegEx mit 2 Ergebnissen

    [autoit]


    $aAuswahl = StringRegExp($sSource,'<a\sclass="vip"\shref="(.*?)">(.*?)</a>',3)

    [/autoit]

    du meinst
    $aAuswahl[0] liefert das erste Ergebnis (.*?)
    $aAuswahl[1] das zweite (.*?)

    ---wie kriege ich die nun in das Array?


    ;) Ilse

  • [autoit]

    ubound

    [/autoit]

    Vermutlich falsch gelesen, ich dachte Du meinst die Menge weil [0] schon mit den Werten anfängt.

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o

  • ...falsch ausgedrückt, sorry

    Das Array $aAuswahl zeigt mir:

    10 Reihen an
    und eine Spalte (col0) mit dem ersten Ergebnis

    wie komme ich an das zweite Ergenis v. RegEx ran? (col1,2,3,4...)

    [autoit]


    for $i = 0 to UBound($aAuswahl ,2) -1
    ;???

    [/autoit][autoit][/autoit][autoit]

    next

    [/autoit]


    komme einfach nicht weiter!

    • Offizieller Beitrag

    wie komme ich an das zweite Ergenis v. RegEx ran? (col1,2,3,4...)


    Indem du meine Antworten gründlich liest? :whistling:

    Zitat von BugFix

    Index 0 = Backreferenz 1 - erstes Auftreten
    Index 1 = Backreferenz 2 - erstes Auftreten
    Index 2 = Backreferenz 1 - zweites Auftreten
    Index 3 = Backreferenz 2 - zweites Auftreten

    Wie das Rückgabearray aufgebaut ist habe ich dir doch oben beschrieben! Natürlich hat es nur eine Dimension. Und die Ergebisse werden in der Reihenfolge des Auftretens eingesetzt.

  • He Bugfix,

    ich hab's genau gelesen, aber nicht verstanden!
    Ich benötige also den Loop mit ubound?
    Wie ich index 0 im Loop anspreche, das verstehe ich nicht!!!!

    [autoit]


    for $i = 0 to UBound($aAuswahl) -1
    _ArrayDisplay($aAuswahl[1], "Ergebnis2???")
    next

    [/autoit]

    tut mir leid, ich stehe total auf dem Schlauch.... :(

    Grüße
    Ilse

  • Vielleicht hilft dieses kurze Scriptbeispiel noch, um das, was BugFix schrieb, zu verdeutlichen:

    [autoit]

    #include <Array.au3>
    $sString = _
    "Key='ABC' Value='DEF'" & @CRLF & _
    "Key='GHI' Value='JKL'" & @CRLF & _
    "Key='MNO' Value='PQR'" & @CRLF

    [/autoit][autoit][/autoit][autoit]

    $aArray = StringRegExp($sString, "Key='(.*?)' Value='(.*?)'", 3)
    _ArrayDisplay($aArray, 'Gesamter Array')

    [/autoit][autoit][/autoit][autoit]

    For $i = 0 To UBound($aArray) - 1 Step 2
    MsgBox(0, "", _
    "$i = " & $i & @CRLF & _
    "$aArray[" & $i & "] = " & $aArray[$i] & @CRLF & _
    "$aArray[" & $i + 1 & "] = " & $aArray[$i + 1] _
    )
    Next

    [/autoit]
  • Hallo Seubo,

    dein Scriptbeispiel hat mir geholfen.
    Für alle anderen, die genau so leiden:

    [autoit][/autoit][autoit][/autoit][autoit]

    for $i = 0 to UBound($aAuswahl) -1 Step 2

    [/autoit][autoit][/autoit][autoit]

    MsgBox(0,"erstes Suchmuster",$aAuswahl[$i]) ; das erste RegEx.....(.*?)...(.*?)
    MsgBox(0,"zweites Suchmuster",$aAuswahl[$i + 1])
    next

    [/autoit]

    Hoffe es ist so richtig!

    Oh Gott, jetzt muß das ganze in die Listview
    in die richtige Zeile, Spalte, Link......

    ...bin etwas fertig :wacko:

    Dank Euch für die guten Nerven

    Liebe Grüße
    Ilse ;)