Regex Suche

  • VB.NET
  • .NET (FX) 4.0

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Higlav.

    Regex Suche

    Hi
    Ich komm bei regex einfach nicht weiter, ich hoffe ihr könnt mir helfen.
    Ich möchte alle namen die zwischen dem ersten und dem zweiten string stehen haben.

    Str1:

    Quellcode

    1. <td class="thead">

    Str2:

    Quellcode

    1. </td>

    Str:
    Spoiler anzeigen

    Quellcode

    1. <table cellpadding="4" cellspacing="1" border="0">
    2. <tr>
    3. <td class="thead">XX</td>
    4. </tr>
    5. <tr><td class="vbmenu_option"><a rel="nofollow" href="XX">Öffentliches Profil ansehen</a></td></tr>
    6. <tr><td class="vbmenu_option"><a href="XX" rel="nofollow">XX</a></td></tr>
    7. <tr><td class="vbmenu_option"><a href="XX" rel="nofollow">Mehr Beiträge von XX finden</a></td></tr>
    8. <tr><td class="vbmenu_option"><a href="XX" rel="nofollow">Mehr Themen von XX finden</a></td></tr>
    9. <tr><td class="vbmenu_option"><a rel="nofollow" href="XX">XX als Kontakt hinzufügen</a></td></tr>
    10. </table>

    Dankeschööön
    Wer Rechtschreibfehler findet darf sie behalten :)

    VB.NET-Quellcode

    1. "(?<=<td class=""thead"">).+?(?=</td>)"

    und RegexOptions.SingleLine einschalten. :thumbup:

    EDIT: Oder ohne die Option:

    VB.NET-Quellcode

    1. "(?<=<td class=""thead"">)(.|\n)+?(?=</td>)"

    Nein, es kommt derweil nichts ausser Blog raus...
    Das soll für das forum sein: elitepvpers.com
    Der erste wird gefunden, das andere wird ignoriert...
    Wer Rechtschreibfehler findet darf sie behalten :)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „joniator“ ()

    So:

    Quellcode

    1. Dim wc As New Net.WebClient
    2. wc.Proxy = Nothing
    3. Dim value As String = wc.DownloadString("http://www.elitepvpers.com/forum/general-coding/3186559-verschl-sselungs-test.html")
    4. Dim r = Regex.Matches(value, "(?<=<td class=""thead"">).+?(?=</td>)", RegexOptions.Singleline)
    5. MsgBox(r.Count)
    6. Dim key As String = ""
    7. For i = 1 To r.Count - 1
    8. key &= vbNewLine & r.Item(i).Value
    9. Next
    10. MsgBox(key)
    Wer Rechtschreibfehler findet darf sie behalten :)
    Ach so. Ja klar. Jetzt weiss ich, wieso's nicht funktioniert hat: Er hält schon in der gleichen Zeile, weil dort ebenfalls ein </td> steckt. Gut, dann eben so(Diesmal ohne SingleLine.Option):

    VB.NET-Quellcode

    1. Dim SiteContent = String.Empty
    2. Using wc As New Net.WebClient
    3. wc.Proxy = Nothing
    4. SiteContent = wc.DownloadString("http://www.elitepvpers.com/forum/general-coding/3186559-verschl-sselungs-test.html")
    5. End Using
    6. Dim List = Regex.Matches(SiteContent, "(?<=<td class=""thead"">).+?\n(.|\n).+?(?=</td>)").Cast(Of Match).ToList.ConvertAll(Function(x) x.Value)
    7. MessageBox.Show(String.Join(vbCrLf, List.ToArray)

    PS: Blind Getippelt und logischerweise auch ungetestet. Evtl. sind die Aufrufe .ToList und .ToArray gar nicht nötig...