Watched Words Trick

監視する単語の大きなリストを正規表現に変換している最中に、フィルタを回避する方法をいくつか発見しました。これらは「通常の」監視単語にも正規表現にも両方適用可能です。

二重スペース: 監視する単語が forbidden word の場合、2つの単語の間に複数のスペースを挿入することで回避できます。面白いことに、投稿が処理された後、二重スペースは削除されるため、最終的なテキストでは完全に目に見えなくなります。

  • 正規表現でこれを防止する方法: forbidden\s*word を使用します。
  • 正規表現を使わずにこれを防止する方法: 解決策は見つかりませんでした。

アンダースコアの使用で単語境界を回避する:

  • 正規表現なしの場合: 監視する単語をアンダースコアで囲むと、イタリック体で表示され、許可されます。つまり、フィルタが forbidden の場合、_forbidden_ は許可されます。

  • 正規表現の場合: 通常、単語境界は \b を使用した場合にのみチェックされますが、その場合でもアンダースコアが優先されます。つまり、フィルタが \bforbidden\b の場合、_forbidden_ は許可されます。

  • 正規表現でこれを防止する方法: \b の代わりに [\b\_] を使用します。
    編集:これはうまくいかないようです
    単語境界を削除する方法も考えられますが、その場合、cumulativetitle のような単語を誤って禁止してしまうリスクがあります :wink:

  • 正規表現を使わずにこれを防止する方法: 解決策は見つかりませんでした。

「いいね!」 7

はい、一般的に私たちはこうしたことに対して時間を費やして争うことはしません。あらゆる種類の単語ブロックリストを回避するための「巧妙な」トリックが多数存在するからです。Unicode は非常に広大な空間です。

「いいね!」 4

確かに、以前は複数の大規模な教育プロジェクトでこれを試みました。

廃止される前に、予測可能な形で正当なユースケースにさまざまな問題を引き起こす曖昧一致(fuzzy matching)を実装して公開しました。

「いいね!」 3

監視ワードは、不適切な言葉に対する「最初の防衛線」として主に機能します。それでも、回避策や違反を報告するにはコミュニティの協力が不可欠です。

あなたが考案するどんな正規表現でも、image のような画像を検出することはできません。

「いいね!」 9

念のためお知らせしますが、[] は「文字クラス」を表します。Perl の正規表現、おそらく Ruby のものでも、\b は文字クラスの外側では「単語境界」を、内側では「バックスペース」を表します。C 言語では、\b は常にバックスペース(正確には<control-H>)です。バックスペースはほとんどの場合役に立たない文字であり、単語境界は有用であるため、この再定義が行われています。

正規表現を使って「_forbidden_」または「forbidden」を検出する場合、以下のようにするのが良いでしょう:

\b_?forbidden_?\b

(すべての文字を Unicode トリックや正規表現を回避するために &#xXX; 形式でエンコードする方法も知っています。)

「いいね!」 3

文脈によって意味が異なることに気づいたことがありませんでした。ご説明いただき、ありがとうございます!:slight_smile:

「いいね!」 2