[英]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.