[REGEX]Ergebnis nicht wirklich richtig

  • VB.NET

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von Redjo.

    [REGEX]Ergebnis nicht wirklich richtig

    Hallo,
    ich habe ein blödes Regex Problem.

    Zu meinem Programm:

    HttpWebRequest auf eine Facebook Fanseite => Source => pastebin.com/2zA1KHEz ( gekürtzt)


    Dort möchte ich alle Bild-URLs sowie deren zugehörige Beschreibung alt= Tag auslesen. Im Grunde sollte dies relative einfach sein. Habe mir auch mehrere Tutorials angeschaut, wo es jeweils erklärt ist, allerdings habe ich bei meinen Testergebnissen sehr seltsame Ergebnisse bekommen.


    Gesucht werden die Fanseiten Bild URLs

    Beisp:
    <div class="uiScaledImageContainer photoWrap"><img class="scaledImageFitWidth img" src="https://fbcdn-sphotos-g-a.akamaihd.net/hphotos-ak-prn2/p480x480/972216_343308492439203_1673861584_n.jpg" alt="Foto: HUNDE und KATZENBESITZER kennen sich aus :D
    stimmts?..haha..is das echt so?! :D

    ganzes Bild: funvidz.net/index.php?id=245" width="403" height="439" /></div>

    =>>> <div class="uiScaledImageContainer photoWrap"><img class="scaledImageFitWidth img" src="GESUCHT" alt="GESUCHT" width="403" height="403" />

    Bildurls die im Source zu finden sind:
    "<div class="uiScaledImageContainer photoWrap"><img class="scaledImageFitWidth img" src="https://fbcdn-sphotos-c-a.akamaihd.net/hphotos-ak-ash3/p480x480/576551_343343225769063_699003291_n.jpg" alt="Foto: ohh mein gott ._.
    so wahr!

    Bild: funvidz.net/index.php?id=247" width="403" height="443" />"

    "<div class="uiScaledImageContainer photoWrap"><img class="scaledImageFitWidth img" src="https://fbcdn-sphotos-e-a.akamaihd.net/hphotos-ak-ash3/p480x480/8472_343332115770174_1473094986_n.jpg" style="top:-299px;" alt="Foto: Brutaalll :D haha richtig geil *o*
    Was Make-Up alles bewirkt!? :D

    Schau dir noch krassere Beispiele an: funvidz.net/index.php?id=246" width="403" height="790" /></div></a></div>"

    1. Ergebnis , funktioniert allerdings werden nur die src="" bzw Bild-Urls ausgelesen

    VB.NET-Quellcode

    1. Dim r As New Regex("<img class=""scaledImageFitWidth img"" src=""(?<src>.+?)""")
    2. Dim ma As MatchCollection = r.Matches(source)
    3. For Each itm In ma
    4. Dim bildurl As String = Regex.Match(itm.ToString, "src=""(?<url>.*?)""").Groups("url").Value
    5. Next


    2. Versuch das gleiche mit ALT Tag

    VB.NET-Quellcode

    1. Dim rs As New Regex("<img class=""scaledImageFitWidth img"" src=""(?<lsd>.+?)"" alt=""(?<alt>.+?)""")
    2. Dim ma As MatchCollection = rs.Matches(source)
    3. For Each itm In ma
    4. Dim bildurl As String = Regex.Match(itm.ToString, "src=""(?<url>.*?)""").Groups("url").Value
    5. Next


    Dummerweise wird mir nur ein Ergebniss gezeigt
    <img class="scaledImageFitWidth img" src="https://fbcdn-sphotos-d-a.akamaihd.net/hphotos-ak-ash3/p480x480/7449_343082835795102_146745628_n.jpg" alt="Foto: Hahahahaha geeeil &#x2013; wei&#xdf;t du es ? -\-\&gt; funvidz.net/index.php?id=230"


    So möchte ich es gerne rausbekommen, und mir dann per Regex/String Split die einzelnen Elemente herausholen
    Aber warum wird nur 1


    Vielen Dank schonmal!
    Hi,

    also dein erstes regex sucht ja nur bis zum ende des src tags. Um den ganzen img node zu bekommen solltest du dein regex um das erweitern.
    "<img class=""scaledImageFitWidth img"" src=""(?<src>.+?)""(.+?)/>

    Beim zweiten regex musst du in den such optionen multline und singleline anschalten dann bekommt du alle image nodes:

    VB.NET-Quellcode

    1. Dim regex As New System.Text.RegularExpressions.Regex("<img class=""scaledImageFitWidth img"" src=""(?<lsd>.+?)"" alt=""(?<alt>.+?)""", RegularExpressions.RegexOptions.Multiline Or RegularExpressions.RegexOptions.Singleline)
    2. For Each m As System.Text.RegularExpressions.Match In regex.Matches(htmlString)
    3. '....
    4. Next


    Das problem ist, dass regex default nur singleline sucht und daher nur ergebnisse bringt die in der selben zeile wieder abschließen.

    Grüße