这是我的正则新手问题:
答案 0 :(得分:3)
正则表达式似乎不是这个特殊钉子的正确锤子。对于您的列表,您可以简单地将所有列入黑名单的单词放入某种排序列表中,并针对该列表扫描每个标记。直接字符串操作总是比调用正则表达式引擎更快。
对于你的变体(“v-iagra”,et.al),我会删除所有非字符(如@Kinopiko建议的那样),然后再次将它们移过你的黑名单。如果你对“viiagra”等事情保持警惕,我会查看Aspell。它是一个很棒的库,看起来像CPAN有一个Perl绑定。
答案 1 :(得分:2)
如何检查字符串是否包含3个垃圾字? (例如:伟哥,药片和商店)
发现这三个单词中的任何一个的正则表达式可能看起来像这样(Perl):
if ($string =~ /(viagra|pills|shop)/) {
# spam
}
如果你想发现所有这三个,单凭正则表达式还不够:
my $bad_words = 0;
while ($string =~ /(viagra|pills|shop)/g) {
$bad_words++;
}
if ($bad_words >= 3) {
# spam
}
如何检测“v-iagra”或“v.iagra”等垃圾词的变体? (另外一个角色)
只用正则表达式来做这件事并不容易。你可以试试像
这样的东西 $string =~ s/\W//g;
删除所有非字字符。和 - ,然后使用上面的测试检查字符串。这也会剥夺空间。