[REGEX] auf wiederholende Zeichen prüfen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [REGEX] auf wiederholende Zeichen prüfen

    Hallo,

    Ich sitze jetzt seit einigen Stunden an einem hartnäckigen Problem. Und zwar geht es darum, dass ein beliebiger Text auf das vorkommen, sich wiederholender Zeichen überprüft werden soll. Ich habe das auch schon soweit hinbekommen, allerdings nur für bestimmte Zeichen.

    Dieser RegEx macht mir aus
    loooooooooooooooooooooool => lol
    oder aus
    ......................... => .

    PHP-Code:
    $patterns[1]    = "#([.|o]){4,}#i";
    $replacements[1]  = '\1';
    preg_replace($patterns$replacements$text); 
    Allerdings bekomme ich es nicht hin, dass er JEDES Zeichen überprüft, ohne jedes Zeichen einzeln im pattern angeben zu müssen. Außerdem sollen auch mehrere Leerzeichen hintereinander zu einem Leerzeichen zusammengefasst werden. [:space:] anzugeben, half da auch nicht.

    Ich hoffe mir kann jemand helfen, ich bin langsam am verzweifeln.

    regards
    Smiller

  • #2
    PHP-Code:
    // beliebige doppelte Zeichen durch einzelne ersetzen (per backreference):
    $patterns[1] = '/(.)\\1+/';
    $replacements[1]  = '$1';

    // alle Tabs, Leerzeichen, Zeilenumbrüche
    // die hintereinander hängen durch EIN Leerzeichen ersetzen:
    $patterns[2] = '/\\s+/';
    $replacements[2]  = ' '
    mein Sport: mein Frühstück: meine Arbeit:

    Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

    Kommentar


    • #3
      preg_replace('/(.)\\1{1,}/i','\\1',$str);
      Beantworte nie Threads mit mehr als 15 followups...
      Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

      Kommentar


      • #4
        Schonmal danke für die schnelle Antwort, allerdings sollen nur Zeichen ersetzt werden, die mehr als 3 mal wiederholt werden, das aus "Schifffahrt" ja nicht "Schifahrt" werden soll (nur ein Beispiel). Außerdem sollen Umbrüche erhalten bleiben. Nur hintereinander stehende Leerzeichen sollen weg.

        Um mal den Sinn zu verdeutlichen:
        Die User bekommen je nach dem wie viel Zeichen sie gepostet haben Punkte. Allerdings kommt es oft vor, dass sich einige User durch langezogene Worte oder Leerzeichen Punkte erschwindeln. Das will ich verhindern.

        regards
        Smiller

        //edit: Danke jetzt funktioniert es, ihr seid echt spize danke danke

        mit preg_replace('/(.)\\1{3,}/i','\\1',$str);
        Zuletzt geändert von Smiller; 01.01.2004, 17:09.

        Kommentar

        Lädt...
        X