2013-02-12 114 views
4

這是其中一個問題已經被提出並回答了上百次,但我很難適應其他解決方案以滿足我的需求。Java和正則表達式:匹配沒有特定字符的子字符串

在我的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 [email protected]"  Should match 
"Non-letter-censored string with [email protected]" Should not match 

任何提示,讓我突然在這個正確的方向?

回答

2

你想要類似\bf[^\s]+a[^\s]+e[^\s]+n[^\s]\b。請注意,這是正則表達式;如果你想要Java,那麼你需要使用\\b[^\\s]+f[^\\s]+a[^\\s]+e[^\\s]+n[^\\s]\b

還要注意,這並不完美,但確實可以處理您建議的情況。

1

這是一個可怕的想法開始。你認爲,你的用戶會寫一些類似「f-aeen」的東西來避免你的過濾器,但是不會拿出「ffaen」或「-faen」或者你沒有準備的任何變化。這是一場你不能贏的比賽,真正的輸家是可用性。

+1

我認爲pro *!#過濾器非常棒@%@ @主意,它們幫助我們保護我們免受骯髒的抨擊充滿猥褻的評論 – Alderath 2013-02-12 09:19:33

+0

很好玩,先生! – 2013-02-12 09:29:27