Как я могу проверить, есть ли в строке 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;
чтобы удалить все несловарные символы, такие как. и -, а затем проверьте строку с помощью теста выше. Это тоже лишит пробелов.