Zwei Zeilen RegEx

  • VB.NET

Es gibt 17 Antworten in diesem Thema. Der letzte Beitrag () ist von phreaq.

    Zwei Zeilen RegEx

    Hey,

    Möchte von fear.fm die Tracks auslesen die im Moment laufen.
    Auf der Homepage werden sie links auf der Seite angezeigt.
    Wie kann ich das jetzt mit Hilfe von RegEx auslesen?

    Ich verstehe wie das mit einer Zeile geht, jedoch sind es ja 3 Zeilen:

    Quellcode

    1. <div class="nowonair-info">
    2. The Stunned Guys And Amnesys - The Symphony Of Sins (Official MOH Anthem 2010) <span>Started on: 20:34</span> </div>


    Wie mach ich das jetzt?
    Hab' irgendwas von \n gelesen, verstehe aber nicht wie ich das einbauen soll...

    Gruss,
    phreaq

    VB.NET-Quellcode

    1. Try
    2. Dim httpRequest As HttpWebRequest = HttpWebRequest.Create("http://fear.fm")
    3. Dim httpResponse As HttpWebResponse = httpRequest.GetResponse()
    4. Dim reader As StreamReader = New StreamReader(httpResponse.GetResponseStream)
    5. Dim httpContent As String = reader.ReadToEnd
    6. Dim TrackRegEx As New Regex("<div class=""nowonair-info""\s*(?<string>(.*))<span>")
    7. Dim Track As String = TrackRegEx.Match(httpContent).Groups("string").ToString()
    8. TextBox1.Text = Track
    9. Catch ex As Exception
    10. End Try


    So?

    VB.NET-Quellcode

    1. Try
    2. Dim httpRequest As HttpWebRequest = HttpWebRequest.Create("http://fear.fm")
    3. Dim httpResponse As HttpWebResponse = httpRequest.GetResponse()
    4. Dim reader As StreamReader = New StreamReader(httpResponse.GetResponseStream)
    5. Dim httpContent As String = reader.ReadToEnd
    6. httpContent.Replace(vbCr, "").Replace(vbLf, "")
    7. Dim TrackRegEx As New Regex("<strong>Now on Hard:</strong><br>(?<string>(.*))</div>")
    8. TrackRegEx.Replace(vbCr, "").Replace(vbLf, "")
    9. Dim Track As String = TrackRegEx.Match(httpContent).Groups("string").ToString()
    10. TextBox1.Text = Track
    11. Catch ex As Exception
    12. End Try


    Wieso klappt das denn jetzt nicht? :(
    Das klappt alles nicht :-O

    Kannst du mir mal bitte deinen Code geben?

    So hab' ich's im Moment:

    Try
    Dim httpRequest As HttpWebRequest = HttpWebRequest.Create("http://fear.fm")
    Dim httpResponse As HttpWebResponse = httpRequest.GetResponse()
    Dim reader As StreamReader = New StreamReader(httpResponse.GetResponseStream)
    Dim httpContent As String = reader.ReadToEnd

    httpContent.Replace(vbCr, "").Replace(vbLf, "")
    Dim TrackRegEx As New Regex("<strong>Now on Harder:</strong><br>(?<string>(.*))</div>")
    Dim Track As String = TrackRegEx.Match(httpContent).Groups("string").ToString()
    TextBox1.Text = Track

    Catch ex As Exception

    End Try

    VB.NET-Quellcode

    1. ' title now on Fear FM
    2. Dim m As Match = Regex.Match(httpContent, "<div class=""nowonair-info"">\s*([^<]+)<")
    3. Trace.WriteLine(m.Groups(1).Value.Trim)
    4. ' title now on hard
    5. m = Regex.Match(httpContent, "<strong>Now on Hard:</strong><br />\s*([^<]+)<")
    6. Trace.WriteLine(m.Groups(1).Value.Trim)
    7. ' title now on hard
    8. m = Regex.Match(httpContent, "<strong>Now on Hardest:</strong><br />\s*([^<]+)<")
    9. Trace.WriteLine(m.Groups(1).Value.Trim)
    In einem laufenden Programm kann man Haltepunkte setzen (F9) und sich in einem angehaltenen Programm alle Variablen ansehen (Shift+F9), sogar Strings.
    Und die kann man, bei Bedarf, manipulieren, ohne das Programm anhalten zu müssen. :thumbsup:
    Und falls Du nicht unter 64 Bit arbeitest, kannst Du sogar das laufende (angehaltene) Programm editieren. :thumbsup:
    Ich glaub, ich lerne erst mal die Grundlagen. ?(
    Halt. Nicht ich.
    Du. :D
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Wieso klappt's nicht? -.-

    VB.NET-Quellcode

    1. Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs)
    2. Try
    3. Dim httpRequest As HttpWebRequest = HttpWebRequest.Create("http://fear.fm")
    4. Dim httpResponse As HttpWebResponse = httpRequest.GetResponse()
    5. Dim reader As StreamReader = New StreamReader(httpResponse.GetResponseStream)
    6. Dim httpContent As String = reader.ReadToEnd
    7. Dim m As Match = Regex.Match(httpContent, "<div class=""nowonair-info"">\s*([^<]+)<")
    8. MsgBox(m.Groups(1).Value.Trim)
    9. ' title now on hard
    10. m = Regex.Match(httpContent, "<strong>Now on Hard:</strong><br />\s*([^<]+)<")
    11. MsgBox(m.Groups(1).Value.Trim)
    12. ' title now on hard
    13. m = Regex.Match(httpContent, "<strong>Now on Hardest:</strong><br />\s*([^<]+)<")
    14. MsgBox(m.Groups(1).Value.Trim)
    15. Catch ex As Exception
    16. End Try
    17. End Sub
    statt Alldem:

    Quellcode

    1. \s*([^<]+)

    hätte ich einfach das hier verwendet:

    Quellcode

    1. .*?
    matcht alles, bis die darauffolgenden Zeichen gefunden wurden...
    also
    Dim m As Match = Regex.Match(httpContent, "<div class=""nowonair-info"">\s*([^<]+)<")

    ->

    VB.NET-Quellcode

    1. Dim m As Match = Regex.Match(httpContent, "<div class=""nowonair-info"">.*?<") 'Falls der ganze DIV Inhalt ausgelesen werden soll einfach anstelle von < am Ende </div> verwenden ;)
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---