对于学校作业,我们被要求使用正则表达式和字符串的matches()方法制作简单的垃圾邮件过滤器。这两个词是垃圾邮件和伟哥。它应该工作,即使它拼写小写或大写,重复字母或字符之间的空格。例如"“V i AA gggg RrR aA"或" xxxSPAMyyy“。
这就是我现在所拥有的
if(Item.getSubject().matches("(?i).*s.*p.*a.*m.*") ||Item.getMessage().matches("(?i).*v.*i.*a.*g.*r.*a.*")){
return false;
}
它适用于上面显示的示例,但也适用于我不希望它工作的字符串。就像句子中只有正确字符的句子一样。谁知道一个好的解决方案?
答案 0 :(得分:0)
您可以预处理或规范化输入数据,以便更简单地匹配正则表达式。例如,如果从输入中删除所有空格字符,则正则表达式将变得更加简单和可靠。正常化后“购买V i AA gggg RrR aA !!!”将成为“BuyViAAggggRrRaA !!!”并且可以很容易地与“(?i)。* v + i + a + g + r + a +。*”表达式匹配。当然,请记住,使用正则表达式永远不会让它100%正确。