Regex findet nix mehr

  • VB.NET
  • .NET (FX) 4.0

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von mys3lf.

    Regex findet nix mehr

    Hallo,

    ich weiß der Titel ist etwas schwammig/unlogisch/übertrieben?!, aber ich komme einfach nicht mehr weiter. Ich hänge seit mehr als 2 Tagen an diesem Problem und zweifle so langsam an mir bzw. den PC....
    Aber zurück zum Problem. Vielleicht bin ich ja auch einfach nur "Blind".

    VB.NET-Quellcode

    1. Dim url As String = "http://chip.de"
    2. Dim content, grey_box As String
    3. Dim httprequest As HttpWebRequest = CType(HttpWebRequest.Create(url), HttpWebRequest)
    4. httprequest.ContentType = "text/html; charset=UTF-8"
    5. Dim httpresponse As HttpWebResponse = CType(httprequest.GetResponse(), HttpWebResponse)
    6. Dim httpreader As StreamReader = New StreamReader(httpresponse.GetResponseStream, System.Text.Encoding.UTF8)
    7. Dim httpcontent As String = httpreader.ReadToEnd()
    8. content = ""
    9. content = httpcontent
    10. mts_suchlauf = Regex.Matches(content, "apple.*?link", RegexOptions.IgnoreCase And RegexOptions.Singleline)
    11. For Each m_suchlauf In mts_suchlauf
    12. grey_box = ""
    13. grey_box = m_suchlauf.ToString
    14. Next m_suchlauf


    Mit folgendem Code möchte ich einfach nur eine Website auslesen und den Inhalt dann nach dem gesuchten String durchsuchen.
    Mit dem Regex-Tester, von ErfinderdesRades war es glaube ich, bekomme ich mit dem gewählten Pattern das gewünschte Ergebnis.
    Wenn ich allerdings den Code so laufen lasse wird kein Match gefunden.

    Ich habe schon versucht es auf bestimmte Zeichen einzugrenzen, aber es ist egal wie kurz der Pattern wird. Lediglich wenn ich direkt nach "apple" suche findet er etwas. Ansonsten ist das Ergebnis immer 0 Matches.
    Ich habe auch schon mit den Regex-Options herum gespielt aber auch hier gab es keine Besserung.

    An

    VB.NET-Quellcode

    1. Imports System.Text
    2. Imports System.Text.RegularExpressions
    3. Imports System.Net
    4. Imports System.IO

    Habe ich natürlich gedacht.

    Randinfo:
    Ich teste meine Pattern immer mit dem Regex-Tester und zu 99% passt auch alles auf Anhieb und wenn nicht beim zweiten dann beim dritten mal, aber ich komme immer ans gewünschte Ergebnis.
    Deshalb macht es mich so stutzig, dass es in diesem Fall einfach überhaupt nicht klappt.


    Vielleicht habt ihr ja eine Idee wo es hackt.
    Ich bin mit meinem talein am ende und bin für jede Idee dankbar.
    It's not a bug, it's a feature
    Das nennt sich BitFlags.
    Die einzelnen Enum-Konstanten im RegexOptions-Enum haben Werte, die Potenzen von 2 sind. Dadurch ist immer nur ein Bit gesetzt.

    VB.NET-Quellcode

    1. IgnoreCase = 1 '000000001 in Binär
    2. Multiline = 2 '000000010
    3. ExplicitCapture = 4 '000000100
    4. Compiled = 8 '000001000
    5. Singleline = 16 '000010000
    6. IgnorePatternWhitespace = 32 '000100000
    7. RightToLeft = 64 '001000000
    8. ECMAScript = 256 '010000000
    9. CultureInvariant = 512 '100000000

    Um mehrere Optionen gleichzeitig zu verwenden, muss man das logische Oder davon verwenden. Als Beispiel mit IgnoreCase und SingleLine:

    VB.NET-Quellcode

    1. Name | Dezimal | Binär
    2. IgnoreCase | 1 | 000000001
    3. Or SingleLine | 16 | 000010000
    4. = | 17 | 000010001

    Wie Du siehst, ist im Ergebnis das Bit von IgnoreCase und das Bit von SingleLine gesetzt.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils