Regex für Wiederholungen

  • PHP

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

    Regex für Wiederholungen

    Hi zusammen,

    ich versuche gerade, einen regulären Ausdruck zu basteln, mit dem ich Wiederholungen im Spam-Stil finden kann - soll heißen, zu viele Zeichen am Stück ("????????") oder mehrfach kopierte Wörter ("Test Test Test Test Test"). Mein Gedanke war nun folgender:

    PHP-Quellcode

    1. "/(.+){5,}/"


    Funktioniert nur leider nicht, da er alles ab 5 Buchstaben findet - er sucht jedes mal neu beliebige Zeichen, statt wie gewünscht den geklammerten Ausdruck zu "behalten".

    Hat jemand eine Idee, wie man das hinbiegen kann?

    vG,
    Lupus
    Das geht doch nur bei Replace, oder? Ich brauche es für preg_match in PHP - so funktioniert es leider nicht...

    Edit: Okay, funktioniert doch - ich habe vergessen, den Backslash zu escapen. Vielen Dank!

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

    Schau dir mal diesen Code an (ist zwar C#, sollte aber auch in PHP anwendbar sein):

    C#-Quellcode

    1. textBox2.Clear();
    2. var Text = textBox1.Text;
    3. var Pattern = @"(\S{2,}).*\1";
    4. while(Regex.IsMatch(Text, Pattern))
    5. {
    6. var Match = Regex.Match(Text, Pattern);
    7. textBox2.AppendText(string.Format("Found Area with Repitition: {0}\r\n", Match.Value));
    8. Text = Text.Remove(Match.Index, Match.Length);
    9. }

    Hierbei ist in der TextBox1 der zu testende Text und in der TextBox2 die Ausgabe. Hier ein Beispielergebnis:
    Input:
    123123123 abc abc abcdefg ?????
    Output:

    Quellcode

    1. Found Area with Repitition: 123123123
    2. Found Area with Repitition: abc abc abc
    3. Found Area with Repitition: ?????

    Dieser Code findet also Widerholungen von Abschnitten, welche mindestens 2 Zeichen lang sind, hier kann man auch einen anderen Wert einstellen.

    MfG Stefan