一直试图解决这个问题几天,现在只是看不到什么是不正确的。建立正则表达式来抓词
功能的想法是捕获垃圾邮件,因此它需要的参数进行检查电子邮件,对被检查包含单词一个字符串数组,并建立一个正则表达式出的一切话。然后使用内置的正则表达式字符串检查电子邮件的正文和主题,如果它包含任何单词,如果它不应该发布它。
它捕获我尝试过的垃圾邮件,但它也捕获所有其他邮件。
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我是,但我也希望它检测这些词如果包含空格或重复的字母的出现。为什么我的当前正则表达式匹配“”? –