Regex mit beobachteten Wörtern verwenden

:bookmark: Dieses Thema erklärt, wie Sie reguläre Ausdrücke (Regex) effektiv innerhalb der Discourse-Funktion Watched Words verwenden können.

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

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

:information_source: Um reguläre Ausdrücke (Regex) in Watched Words zu verwenden, müssen Sie zunächst die Site-Einstellung watched_words_regular_expressions aktivieren.

:warning: Regex ist extrem leistungsstark und daher potenziell gefährlich. Ein falsch geschriebener Regex-Ausdruck kann Probleme für Ihre Benutzer verursachen. Testen Sie Ihre Regex-Ausdrücke vor dem Live-Gang auf nicht-produktiven Instanzen.

Beispiel-Regex-Muster

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

Groß-/Kleinschreibung ignorieren

Standardmäßig erkennt Discourse sowohl Groß- als auch Kleinschreibungsformen eines Wortes.

thread

Dies erkennt thread, THREAD und thReAd.

Zeichenalternativen

Verwenden Sie Zeichenalternativen, um Ihre Treffer zu erweitern.

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

Dies erkennt alle oben genannten Fälle sowie thr3ad, 7hread und thr34d.

threads?\b

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

Wortgrenzen

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

\bthreads?\b

Dies erkennt thread und threads, vermeidet jedoch Übereinstimmungen wie threadlike oder unthreading.

Umgang mit Unicode-Zeichen

Standard-Wortgrenzen können bei Unicode-Zeichen versagen. Erstellen Sie Grenzen für Zeichen, die von JavaScript-Regex nicht gut behandelt werden.

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

Dies erkennt 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 JavaScript-Regex-Wortflags keine Unicode-Zeichen verarbeiten. Stattdessen müssen Sie eigene Grenzen erstellen.

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

Dies erkennt nun korrekt Über und ueber, aber nicht Übersicht oder uebersicht.

Absichtliche Zeichenersetzungen erkennen

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

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

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

Umgang mit Zeichen, die durch Interpunktion getrennt sind

Um Versuche zu erkennen, Filter durch Einfügen von Interpunktion zu umgehen:

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

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

Mehrere Wortvariationen erkennen

Für das Erkennen von Phrasen, die in verschiedenen Wortformen auftreten können:

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

Dies erkennt: contact, contact us, contact me, email, email us, email me, reach, reach us, reach me.

E-Mail-Muster erkennen

Um generische E-Mail-Adressmuster zu erkennen:

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

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

Hashtag-Variationen finden

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

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

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

Wiederholte Muster erkennen

Um wiederholte Zeichen zu erkennen, die auf spamartige Inhalte hindeuten könnten:

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

Dies erkennt: aaaample, helllllo, yessssss – jedes Zeichen, das 4 oder mehr Mal hintereinander wiederholt wird.

URLs mit oder ohne Protokoll finden

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

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

Vermeidung verschachtelter Zeichenklassen

Korrekt:

(hold)?

Dies erkennt korrekt das optionale Wort „hold“.

Oder wenn Sie Zeichenalternativen verwenden möchten:

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

Dies erkennt: hold, h0ld, ho1d, h01d.

Falsch:

[h[o0][l1]d]?

Dies versucht fälschlicherweise, Zeichenklassen zu verschachteln, und erkennt jedes einzelne Zeichen aus h, o, 0, l, 1 oder d, wodurch Wörter wie had, old usw. erkannt werden.

Verwendung von Klammern für optionale Wörter

Korrekt:

forum(s)?

Dies erkennt korrekt: forum, forums.

Falsch:

forum[s]?

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

Korrekte Verwendung von Zeichenklassen

Korrekt:

bad word

Um die Phrase „bad word“ zu erkennen.

Oder als Beispiel für eine Zeichenklasse:

[bB][aA][dD]

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

Falsch:

[bad word]

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

Quantifizierer effektiv verwenden

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

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

Für spezifische wiederholende Muster:

(spam){2,3}

Dies erkennt: spamspam, spamspamspam.

Wortgrenzen korrekt anwenden

Ohne Grenzen:

free

Dies erkennt: free, freedom, carefree.

Mit Grenzen:

\bfree\b

Dies erkennt nur: free, aber nicht freedom oder carefree.

Umgang mit Unicode-Zeichen korrekt

Korrekte Vorgehensweise:

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

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

Falsche Vorgehensweise:

\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. Stellen Sie dabei sicher, dass Sie den Regex-Flavour auf ECMAScript umstellen.

Regex-Erfassungsgruppen-Rückverweise (z. B. \1 in Ersetzungszeichenfolgen) werden in den Ersetzungswerten von Watched Words nicht unterstützt. Die Aktionen „Ersetzen“ und „Link“ unterstützen zwar Regex für die Übereinstimmung, 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“