StringRegEx Findet 9, RegExbuddy aber 11 Einträge

  • Hey Autoitter,
    wie die Überschrift sagt, habe ich ein Problem mit StringRegEx. Ich Versuche immoment Informationen über ein Album automatisch von Musicload auszulesen. Soweit sogut klappt auch alles,
    jedoch findet Autoit mit meiner Regular Expression nur 9 Einträge, von den eigentlichen 11. Besser gesagt, er findet 11 Songs und nur 9 Titellängen.
    Ich teste immer mit diesem Link: Musicload .
    Das Problem ist, Autoit findet nur die Zeiten:

    Spoiler anzeigen


    3:49</td>
    4:14</td>
    4:09</td>
    4:12</td>
    3:14</td>
    3:21</td>
    4:27</td>
    4:30</td>
    3:22</td>
    3:39</td>


    Und RegExBuddy findet (Das hier will ich mit Autoit finden):

    Spoiler anzeigen


    3:49</td>
    4:14</td>
    4:09</td>
    4:12</td>
    3:14</td>
    3:21</td>
    4:27</td>
    4:30</td>
    3:22</td>
    3:39</td>
    4:02</td>
    3:45</td>

    Mein Script (leicht gekürzt, aber ausführbar!):

    Spoiler anzeigen
    [autoit]


    #include <File.au3>
    #include <Array.au3>
    #include <WinAPI.au3>
    #include <WindowsConstants.au3>
    #include <GuiConstants.au3>
    #include <String.au3>
    #include <INet.au3>
    #include <Math.au3>
    ;Ich weiß, ich hab zu viele Includes, die sind in der vollen Version jedoch alle nötig ;)
    $fString =_INetGetSource("http://www.musicload.de/billy-talent/billy-talent-iii-w-bonus-track/musik/album/5179079_2")
    $aResult = _Search($fString)
    _ArrayDisplay($aResult, "The Album: ")

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

    Func _Search($String)
    $String = StringReplace($String, "'", "")
    $RegExp = '<a title="(?:[A-Za-z0-9]|\-|\.|\Ü|\Ä|\Ö|\ü|\ä|\ö|\s)*" href="http://www.musicload.de/(?:\w|\s|\-|\/|\\)*">(?:\w|\s|\[|\]\-)*</a></td>'
    $Songs = StringRegExp($String, $RegExp, 3)
    $RegExp = '<td class="rowbot" style="">\s*(?:[A-Za-z0-9]|\-|\.|\Ü|\Ä|\Ö|\ü|\ä|\ö|\s|\[|\])*</td>'
    $SongLast = StringRegExp($String, $RegExp, 3)
    if IsArray($SongLast) Then $SongLast[0] = StringTrimLeft(StringTrimRight($SongLast[0], 5), 28)
    $Songs = _ArrToStr($Songs)
    $RegExp = "(?:\w|\s)*</a>"
    $Songs = StringRegExp($Songs, $RegExp, 3)
    For $i = 0 To UBound($Songs) - 1
    $Songs[$i] = StringTrimRight($Songs[$i], 4)
    Next
    Local $length[UBound($Songs)]
    $RegExp = "(?i)(?x)\d+:\d+</td>"
    $length = StringRegExp($String, $RegExp, 3)
    If UBound($length) > UBound($Songs) Then _
    ReDim $length[UBound($Songs)]
    if IsArray($SongLast) Then _ArrayAdd($Songs, $SongLast[0])
    _ArrayConcatenate($Songs, $length)
    Return $Songs
    EndFunc ;==>_Search
    Func _ArrToStr($Arr, $delimiter = "")
    $end = ""
    For $i = 0 To UBound($Arr) - 1
    $end &= $Arr[$i]
    Next
    Return $end
    EndFunc ;==>_ArrToStr

    [/autoit]


    Datei zum testen (enthält alles nötige)

    Spoiler anzeigen
    Meine Werke


    EasyScreen (teilweise Crocoframe): <EasyScreen>
    Spotify2Title: <Spotify2Title> (zur Info, dies ist KEIN Spotify-Downloader! Wer das dachte... :rofl: sowas gibts hier nicht :thumbdown: )

  • Vielleicht denke ich zu simpel - aber sollte das nicht funktionieren?:

    [autoit]

    #include <Array.au3>
    $a_RegExp = StringRegExp(BinaryToString(InetRead("http://www.musicload.de/billy-talent/billy-talent-iii-w-bonus-track/musik/album/5179079_2")), '(?m)^\s+(\d+:\d+)</td>\s*$', 3)
    _ArrayDisplay($a_RegExp)

    [/autoit]
  • Das geht :-). Danke,
    aber warum gehts nicht so wie ich es gemacht habe?
    Am RegEx kanns nicht liegen, das habe ich auch mit deinem getestet, ohne Ergebnis. Anscheind am BinaryToString oder so, mal sehen.
    Danke für die schnelle Antwort

    //Edit
    Hab meinen Fehler gefunden, war i-wo ein redim, der das Array auf die lange des Songarrays -1 kürzt :thumbdown:

    Meine Werke


    EasyScreen (teilweise Crocoframe): <EasyScreen>
    Spotify2Title: <Spotify2Title> (zur Info, dies ist KEIN Spotify-Downloader! Wer das dachte... :rofl: sowas gibts hier nicht :thumbdown: )

    2 Mal editiert, zuletzt von Xyron (28. Mai 2011 um 14:55)