一直試圖解決這個問題幾天,現在只是看不到什麼是不正確的。建立正則表達式來抓詞
功能的想法是捕獲垃圾郵件,因此它需要的參數進行檢查電子郵件,對被檢查包含單詞一個字符串數組,並建立一個正則表達式出的一切話。然後使用內置的正則表達式字符串檢查電子郵件的正文和主題,如果它包含任何單詞,如果它不應該發佈它。
它捕獲我嘗試過的垃圾郵件,但它也捕獲所有其他郵件。
private boolean isSpam(Mail mail, String[] filter){
StringBuilder sb = new StringBuilder();
// Build the regex String for each string in filter
for(int i=0;i<filter.length;i++){
sb.append("(?i).*");
for(int ii = 0;ii<filter[i].length();ii++){
sb.append("[" + filter[i].charAt(ii) + "\\s]*"); // [x\\s]*; x = current letter
}
filter[i] = sb.toString();
sb.delete(0, sb.length());
}
for(int i=0;i<filter.length;i++){
if(mail.getSubject().matches(filter[i]) || mail.getMessage().matches(filter[i])){
return true;
}
}
return false;
}
前者的正則表達式字符串。 垃圾郵件看起來像:(?i)。 [S \\ S] [P \\ S] [A \\ S] [M \\秒] *
你對每個字符檢查? – Adarsh
你是否試圖爲幾個單詞做一個不區分大小寫的子字符串?正如所寫,該正則表達式將匹配「」。我有一種感覺,你想要的更像(?)spam1 | spam2 | spam3。 –
@David Ehrmann我是,但我也希望它檢測這些詞如果包含空格或重複的字母的出現。爲什麼我的當前正則表達式匹配「」? –