这是已被问过并回答了数百次的问题之一,但我很难根据自己的需要调整其他解决方案。
在我的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
有什么提示让我朝着正确的方向前进吗?
答案 0 :(得分:2)
你想要像\bf[^\s]+a[^\s]+e[^\s]+n[^\s]\b
这样的东西。请注意,这是正则表达式;如果你想要Java,那么你需要使用\\b[^\\s]+f[^\\s]+a[^\\s]+e[^\\s]+n[^\\s]\b
。
另请注意,这并不完美,但可以处理您建议的情况。
答案 1 :(得分:1)
开始时这是一个糟糕的主意。你认为,你的用户会写一些像“f-aeen”这样的东西来避免你的过滤器,但不会想出“ffaen”或“-faen”或者你没有准备的任何变化?这是一场你无法获胜的比赛,真正的输家就是可用性。