1. GSManager
    1. Funktionen
    2. Unterstützte Spiele
    3. Neuigkeiten
    4. Statistiken
    5. Serverliste
  2. Lexikon
  3. Filebase
  4. Entwicklung
  5. Forum
    1. Dashboard
    2. Unerledigte Themen
  6. Web-Interface
  7. Artikel
  8. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Artikel
  • Seiten
  • Dateien
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. GSManager
  2. Forum
  3. Unterstützung
  4. Benutzung

Fehler bezüglich RegEx

  • Smearlap
  • 5. Juli 2008 um 21:21
Das Projekt GSManager (vormals ManuAdminMod) wurde am 01.01.2020 eingestellt - diese Internetpräsenz bleibt verfügbar, die Software wird aber nicht länger gepflegt. Vielen Dank für eure Unterstützung in den mehr als zehn vergangenen Jahren!
1. offizieller Beitrag
  • Smearlap
    Anfänger
    Punkte
    90
    Beiträge
    15
    • 5. Juli 2008 um 21:21
    • #1

    Hi,

    ich habe soeben etliche Schimpfwörter per RegEx hinzugefügt.

    Nun erhalte ich jedoch folgende Ausgaben im Log:

    [05:54:33] C:\Call of Duty 4\Home\gg32000\adminmod\include\say.inc.php:54,2,preg_match(): Unknown modifier 'ö'

    Hier einmal ein Auszug aus meiner Regex Tabelle wo als einziges ein "ö" vorkommt:

    regexp:/b\s?l\s?(oe|ö)\s?d/i
    regexp:/m\s?(ö|oe|o3)\s?s\s?[e3]/i

    Ist dort irgendwo ein Fehler in meinem Ausdruck? Ich muss ja mit Substrings arbeiten um ö oder oe zu erkennen, denn sonst umgeht jemand den Wortfilter relativ einfach. Nur wird der Substring als separates Array zurückgegeben. Kann / muss ich das ändern?

    Ich hoffe jemand kann mir helfen. ?(

    2 Mal editiert, zuletzt von Smearlap (5. Juli 2008 um 21:25)

  • Smearlap
    Anfänger
    Punkte
    90
    Beiträge
    15
    • 6. Juli 2008 um 17:37
    • #2

    HM also anscheinend weiss niemand die Lösung. Nun gut ich habe es mittlerweile selber herausgefunden:

    Die Funktion preg_match liefer in einem Array nicht nur den gefundenen String zurück, sondern auch als weitere Arrays die Substring-Ergebnisse.

    Beispiel:

    Erdnüsse

    wird mit folgendem RegEx:

    /erdn(ue|ü)sse/i

    so zurückgegeben:

    array[0]=erdnüsse
    array[1]=ü

    Der zweite Array-Teil bezieht sich auf den Substring.
    Blöderweise kommt der Admin Mod mit dem zweiten Teil des Arrays nicht zurecht. Daher der Logeintrag...

    Ich habe es nun so gelöst, dass ich sowohl für das Wort mit Ü als auch UE einen sepraraten RegEx angelegt habe.

    Da das gefundene Wort immer als erstes im Array auftaucht, empfehle ich für die kommende Version eine Art Array-Strip sodass nur der ertse Eintrag berücksichtigt wird. Denn entscheident für den Admin Mod ist ja schlielich das gesamte Wort, nicht der Substring.

    Ich hoffe ich konnte somit etwas zu diesem Projekt beitragen.

  • manu
    Meister
    Punkte
    10.835
    Trophäen
    3
    Beiträge
    2.113
    • 6. Juli 2008 um 17:59
    • #3

    Ähm, ne. Die Ursache des Problems ist eine andere und hat nichts mit der Rückgabe vom preg_match zu tun. Weil die gibt keine Arrays mit den gefundenen Strings zurück, sondern einen Integer-Wert mit der Anzahl der Treffer.
    Mein Mod prüft einfach ob der Rückgabewert > 0 ist und gibt dann entsprechend TRUE (für böses Wort gefunden) oder FALSE (böses word nicht gefunden) zurück, behandelt die gefundenen (Sub)Sstrings also nicht.

    Das Problem, nein eher der Bug, geht von dem Zeichen | aus. Du verwendest in deinem Suchmuster das Zeichen "/" als Begrenzer. Mein Mod fügt aber bereits Begrenzer hinzu, und verwendet dafür das Zeichen "|". Der entsprechende Ausschnitt lautet so:

    Code
    "|$value|i"

    Also, zuerst einmal: Du brauchst keine Begrenzer und auch keinen Modifikator (i).

    Und nun zum Bug:
    Wenn du in deinem Regex das Zeichen "|" verwendest, erkennt die Funktion dieses Zeichen frühzeitig als Begrenzer und denk, die nachkommenden Zeichen sind Modifikatoren, z.B. das ö (Deshalb der Fehler: Unknown modifier 'ö').
    Und hier liegt dann auch der Bug: Ich habe einfach vergessen, die | in dem Regulären Ausdrücken mit einem Backslash zu escapen. Das werde ich einbauen. Danke für den Bugreport ;)

    Und das nächste mal nich ganz so schnell denken, dir will keiner helfen^^ Ich war das Wochenende auf LAN-Party und hatte deshalb keine Zeit zu antworten :)

    Gruß
    manu

  • Dieses Thema enthält 11 weitere Beiträge, die nur für registrierte Benutzer sichtbar sind.
  1. Mitarbeiter
  2. Datenschutzerklärung
  3. Nutzungsbedingungen
  4. Impressum
  5. Kontakt
Community-Software: WoltLab Suite™