Java&正则表达式:匹配不带特定字符的子字符串

时间:2013-02-12 08:42:47

标签: java regex

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

在我的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

有什么提示让我朝着正确的方向前进吗?

2 个答案:

答案 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”或者你没有准备的任何变化?这是一场你无法获胜的比赛,真正的输家就是可用性。