Regex Problem?

  • C#
  • .NET (FX) 4.5–4.8

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von jens1o.

    Regex Problem?

    Hi,

    meine regex funktion gibt mir einen Fehler an, obwohl ich am Anfang das "@" Symbol gesetzt habe ... Könnt ihr mir helfen? Ich habe auch alle \ durch ein / als ungültig erklärt.
    Fehler:
    "((http:\/\/|ftp:\/\/|https:\/\/|)[\w\_]+(\.[abcdefghijklmnopqrstuvwxyz]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?)" wird analysiert - Unbekannte Escape-Zeichenfolge \_.
    Code(die Funktion sollte Links erkennen können):

    C#-Quellcode

    1. void CheckisSpam(string Message)
    2. {
    3. int matches = Regex.Matches(Message, @"((http:\/\/|ftp:\/\/|https:\/\/|)[\w\_]+(\.[abcdefghijklmnopqrstuvwxyz]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?)").Count;
    4. MessageBox.Show(matches.ToString());
    5. }
    selbst ohne \_ kommt der Fehler:

    C#-Quellcode

    1. @"((http:\/\/|ftp:\/\/|https:\/\/|)[\w\]+(\.[abcdefghijklmnopqrstuvwxyz]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?)"
    bei mir nicht.
    bei mir kommt jetzt ein anderer Fehler - du hast es verschlimmbessert, aber heftig.

    Weißt du überhaupt, was eine Escape-Zeichenfolge ist?

    von \_ hast du das _ weggemacht, und das Escape-Zeichen \ stehen lassen. Das escaped jetzt natürlich ein anderes Zeichen, weil das _ ist ja weg.
    Und natürlich ist der Regex so erst recht ein totaler Unfug.
    Manche Zeichen haben in Regex eine andere Bedeutung (bspweise . bedeutet beliebiges Zeichen)
    Wenn du jetzt z.B. nach einem . suchen wollen würdest, muss der Regex-parser ja wissen dass mit . nicht beliebiges Zeichen sondern der . als Punkt gemeint ist und darum escapest du das dann.

    Da jedoch _ keine solche Bedeutung hat, ist es sinnlos dieses zu escapen.
    Thema behoben. Danke an Erfinderdesrades und RushDen.Fertiger Code:void CheckisSpam(string Message)

    C#-Quellcode

    1. void CheckisSpam(string Message)
    2. {
    3. int matches = Regex.Matches(Message, @"((http:\/\/|ftp:\/\/|https:\/\/|)[\w_]+(\.[abcdefghijklmnopqrstuvwxyz]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?)").Count;
    4. MessageBox.Show(matches.ToString());
    5. }