4

这是已经被问过并回答了数百次的问题之一,但我很难根据自己的需要调整其他解决方案。

在我的 Java 应用程序中,我有一种方法可以审查聊天消息中的坏词。它适用于我的大部分话,但有一个特殊的(和流行的)诅咒词我似乎无法摆脱。这个词是“faen”(在所讨论的语言中,这只是“撒旦”的现代俚语)。

使用模式“fa+e+n”来匹配多个 A 和 E 确实有效;然而,在这种语言中,“那个沙发”或“那个沙发”的词是“沙发”。我尝试了很多不同的方法,使用 [^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 回答