4

これは、何百回も尋ねられ、回答されてきた質問の 1 つですが、他のソリューションを自分のニーズに合わせるのに苦労しています。

私の Java アプリケーションには、チャット メッセージの悪い言葉を検閲する方法があります。それは私の言葉のほとんどで機能しますが、私が取り除くことができないように見える特定の(そして人気のある)呪いの言葉が1つあります. その言葉は「ファエン」です(問題の言語では、単に「サタン」の現代的なスラングです)。

複数の A と E を一致させるためにパターン "fa+e+n" を使用すると、実際に機能します。ただし、この言語では、「そのソファ」または「そのソファ」の単語は「ソファエン」です。[^so] と (?!=so) のバリエーションを使用して、さまざまなアプローチを試しましたが、これまでのところ、一方を一致させて他方を一致させる方法を見つけることができませんでした。

ここでの本当の目標は、母音の数に関係なく、単語の構成要素の間に文字以外の文字が含まれていても、悪い単語を一致させることです。

私がやろうとしていることのいくつかの例を次に示します。

"String containing faen"                        Should match
"String containing sofaen"                      Should not match
"Non-letter-censored string with f-a@a-e.n"     Should match
"Non-letter-censored string with sof-a@a-e.n"   Should not match

これについて正しい方向に向けるためのヒントはありますか?

4

2 に答える 2

2

のようなものが必要です\bf[^\s]+a[^\s]+e[^\s]+n[^\s]\b。これは正規表現であることに注意してください。Java が必要な場合は、 を使用する必要があります\\b[^\\s]+f[^\\s]+a[^\\s]+e[^\\s]+n[^\\s]\b

これは完璧ではありませんが、提案した状況を処理することにも注意してください。

于 2013-02-12T08:51:16.907 に答える
1

そもそもひどい考えです。ユーザーはフィルターを回避するために「f-aeen」のようなものを書きますが、「ffaen」や「-faen」など、準備していないバリエーションは思いつきませんか? これは勝てないレースであり、真の敗者は使いやすさです。

于 2013-02-12T08:53:08.063 に答える