Regex mit beobachteten Wörtern verwenden

:bookmark: Dieses Thema erklärt, wie man reguläre Ausdrücke (Regex) effektiv in der Discourse-Funktion Watched Words verwendet.

:discourse: Bei Websites, die auf unserem Hosting laufen, sind diese Einstellungen ausgeblendet. Kunden mit kostenpflichtigen Hosting-Plänen können unser Support-Team unter team@discourse.org kontaktieren, um Regex für Watched Words anzufordern.
Hinweis: Diese Funktion ist auf unserem kostenlosen Hosting-Plan nicht verfügbar.

Reguläre Ausdrücke (Regex) sind ein mächtiges Werkzeug zur Definition von Suchmustern. Sie können Regex in der Funktion Watched Words verwenden, um die Genauigkeit und Flexibilität der Wortfilterung auf Ihrer Discourse-Seite zu verbessern.

:information_source: Um reguläre Ausdrücke (Regex) in beobachteten Wörtern zu verwenden, müssen Sie zuerst die Site-Einstellung watched words regular expressions aktivieren.

:warning: Regex ist extrem mächtig und daher gefährlich. Eine falsch geschriebene Regex-Anweisung kann Probleme für Ihre Benutzer verursachen. Testen Sie Ihre Regex-Anweisungen auf Nicht-Produktionsinstanzen, bevor Sie diese live schalten.

Beispiel für Regex-Muster

Hier sind einige gängige Regex-Muster und wie sie eingesetzt werden können:

Groß-/Kleinschreibung ignorieren

Standardmäßig gleicht Discourse sowohl Groß- als auch Kleinschreibung eines Wortes ab.

thread

Dies findet thread, THREAD und thReAd.

Zeichenalternativen

Verwenden Sie Zeichenalternativen, um Ihre Übereinstimmungen zu erweitern.

(t|7)hr(3|e)(4|a)d

Dies findet alle obigen Fälle, plus thr3ad, 7hread und thr34d.

threads?\\b

Dies findet thread und threads, aber nicht threaded oder threading.

Wortgrenzen

Regex-Muster können unbeabsichtigt Teile von Wörtern finden. Verwenden Sie Wortgrenzen, um Teilübereinstimmungen zu vermeiden.

\bthreads?\b

Dies findet thread und threads, vermeidet aber Übereinstimmungen wie threadlike oder unthreading.

Umgang mit Unicode-Zeichen

Standard-Wortgrenzen funktionieren bei Unicode-Zeichen möglicherweise nicht. Erstellen Sie Grenzen für Zeichen, die von JavaScript-Regex nicht gut behandelt werden.

gr(ü|ue)(ß|ss)e

Dies findet alle gängigen Schreibweisen des Wortes grüße — einschließlich gruesse und GRÜSSE

Angenommen, Sie möchten das Wort Über blockieren, aber nicht Übersicht. Die Verwendung von Wortgrenzen wie \b(ü|ue)ber\b funktioniert nicht, da einige der JavaScript-Regex-Wort-Flags Unicode-Zeichen nicht behandeln. Stattdessen müssen Sie Ihre eigenen Grenzen erstellen.

(?:^|\s)(ü|ue)ber\b

Dies findet nun angemessen Über und ueber, aber nicht Übersicht oder uebersicht.

Gezielte Zeichensubstitutionen erfassen

Um Wörter zu erfassen, bei denen Benutzer Zahlen oder Sonderzeichen für Buchstaben ersetzen:

\bp[a@]ssw[o0]rd\b

Dies findet: password, p@ssword, passw0rd, p@ssw0rd, aber nicht mypassword oder password123

Umgang mit Zeichen mit dazwischenliegender Interpunktion

Um Versuche zu erfassen, Filter durch das Einfügen von Satzzeichen zu umgehen:

\bs\W*p\W*a\W*m\b

Dies findet: spam, s.p.a.m, s-p-a-m, aber nicht s_p_a_m (Unterstrich ist ein Wortzeichen), spammy oder myspam

Mehrere Wortvariationen abgleichen

Zum Abgleichen von Phrasen, die in verschiedenen Wortformen auftreten können:

\b(contact|email|reach)( us| me)?\b

Dies findet: contact, contact us, contact me, email, email us, email me, reach, reach us, reach me

Erkennen von E-Mail-Mustern

Um generische Muster von E-Mail-Adressen zu erfassen:

\b[\w.%+-]+@[\w.-]+\.[a-zA-Z]{2,}\b

Dies findet: user@example.com, my.name@sub.domain.co.uk, user+tag@domain.org

Finden von Hashtag-Variationen

Um Hashtags mit unterschiedlicher Groß-/Kleinschreibung oder leichten Variationen abzugleichen:

\#(disc[o0]urse|f[o0]rum)\b

Dies findet: #discourse, #DISCOURSE, #disc0urse, #forum, #f0rum, aber nicht #discourseengine oder #forums

Erkennen sich wiederholender Muster

Um wiederholte Zeichen zu erfassen, die auf Spam-Inhalt hindeuten könnten:

([a-zA-Z])\1{3,}

Dies findet: aaaample, helllllo, yessssss, erkennt jeden Buchstaben, der 4 oder mehr Mal hintereinander wiederholt wird

URLs mit oder ohne Protokoll finden

\b(?:https?:\/\/)?[\w-]+(\.[\w-]+)+\b

Dies findet: example.com, sub.domain.org, https://discourse.org, http://meta.discourse.org

Vermeiden von verschachtelten Zeichenklassen

Korrekt:

(hold)?

Dies findet das optionale Wort „hold“ korrekt

Oder wenn Sie Zeichenalternativen wünschen:

[h][o0][l1][d]

Dies findet: hold, h0ld, ho1d, h01d

Falsch:

[h[o0][l1]d]?

Dies versucht fälschlicherweise, Zeichenklassen zu verschachteln, und findet jedes einzelne Zeichen aus h, o, 0, l, 1 oder d, was dazu führt, dass Wörter wie had, old usw. gefunden werden.

Verwendung von Klammern für optionale Wörter

Korrekt:

forum(s)?

Dies findet korrekt: forum, forums

Falsch:

forum[s]?

Dies findet „forum“, gefolgt von einem optionalen „s“, verwendet aber unnötigerweise eine Zeichenklasse.

Korrekte Verwendung von Zeichenklassen

Korrekt:

bad word

Um die Phrase „bad word“ zu finden

Oder als Beispiel für eine Zeichenklasse:

[bB][aA][dD]

Dies findet: bad, Bad, bAd, BAD usw.

Falsch:

[bad word]

Dies findet jedes einzelne Zeichen aus b, a, d, w, o, r oder d, nicht die Phrase „bad word“.

Effektiver Einsatz von Quantifizierern

\b[0-9]{3,5}\b

Dies findet Zahlen mit 3 bis 5 Ziffern: 123, 1234, 12345, aber nicht 12 oder 123456

Für spezifische sich wiederholende Muster:

(spam){2,3}

Dies findet: spamspam, spamspamspam

Ordnungsgemäße Anwendung von Wortgrenzen

Ohne Grenzen:

free

Dies findet: free, freedom, carefree

Mit Grenzen:

\bfree\b

Dies findet nur: free, aber nicht freedom oder carefree

Korrekter Umgang mit Unicode-Zeichen

Korrekter Ansatz:

(?:^|\s)(ö|oe)zel\b

Dies findet: özel, oezel an Wortgrenzen, auch bei Unicode-Zeichen

Falscher Ansatz:

\bözel\b

Dies funktioniert möglicherweise nicht korrekt mit dem türkischen Zeichen ö.

Zusätzliche Informationen

:information_source: Sie können Regex-Ausdrücke auf https://regex101.com/ testen. Wenn Sie dies tun, stellen Sie sicher, dass Sie die Regex-Sprachversion auf ECMAScript umstellen.

Regex-Erfassungsgruppen-Rückreferenzen (z. B. \1 in Ersetzungszeichenfolgen) werden in den Ersetzungswerten von Watched Words nicht unterstützt. Die Aktionen „Ersetzen“ und „Verknüpfen“ unterstützen zwar Regex für den Abgleich, die Ersetzung ist jedoch immer eine Literalzeichenfolge.

13 „Gefällt mir“

Verzeihen Sie meine Unwissenheit, aber ich konnte die Website-Einstellung für watched words regular expressions nirgends finden. Ich habe auch nach regex, regular expression und anderen Varianten gesucht, aber nichts gefunden, das so aussah, als würde es Regex für beobachtete Wörter aktivieren. Haben Sie den Slug zu den Website-Einstellungen, wo dies aktiviert werden kann (Cloud-gehostete Instanz)?

EDIT Die Antwort war direkt darüber und hier gefunden: https://meta.discourse.org/t/hidden-settings-on-discourse-hosted-sites/310574

2 „Gefällt mir“