簡體   English   中英

Java&Regex:匹配不在特定字符前面的子字符串

[英]Java & Regex: Matching a substring that is not preceded by specific characters

這是已被問過並回答了數百次的問題之一,但我很難根據自己的需要調整其他解決方案。

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

有什么建議可以讓我朝着正確的方向前進嗎?

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

另請注意,這並不完美,但可以處理您建議的情況。

一開始這是一個糟糕的主意。 你認為,你的用戶會寫一些像“f-aeen”這樣的東西來避免你的過濾器,但不會想出“ffaen”或“-faen”或者你沒有准備的任何變化? 這是一場你無法獲勝的比賽,真正的輸家就是可用性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM