Рекомендуется к прочтению "GWAVA AntiSpam Rule Development Guide от Amarna Software Prtoductions/Beginfinite Inc 2003" времен GWAVA 2.x - у меня PDF не сохранился - с трудом нашел полученный документ но как я понял если написать на
support@gwava.com то вышлют (может у кого - нибудь тоже имеется ?)
Там хорошо расписано по регекспам применяемым в GWAVA антиспаме.
Сразу оговорюсь с GWAVA 3.7+ Advanced Antispam не связывался - пока юзаю 3.6 (с его Standard Antispam Engine).
Как и следовало ожидать рулы вида
/spamword/i в случае русских слов не работали + в нашем спаме бывают аццкого вида подстановки, посему на входе спамерские слова обрабатываю с такими подстановками:
============ cut here ===============
case 'а':
case 'А': {
strncat(StrOutBuf,"[AaАа]",65534);
break;
}
case 'б':
case 'Б': {
strncat(StrOutBuf,"[Бб]",65534);
break;
}
case 'в':
case 'В': {
strncat(StrOutBuf,"[ВвB]",65534);
break;
}
case 'г':
case 'Г': {
strncat(StrOutBuf,"[Ггr]",65534);
break;
}
case 'д':
case 'Д': {
strncat(StrOutBuf,"[Дд]",65534);
break;
}
case 'е':
case 'Е':
case 'Ё':
case 'ё': {
strncat(StrOutBuf,"[ЕеEeЁё]",65534);
break;
}
case 'ж':
case 'Ж': {
strncat(StrOutBuf,"[Жж]",65534);
break;
}
case 'з':
case 'З': {
strncat(StrOutBuf,"[Зз3]",65534);
break;
}
case 'и':
case 'И':
case 'й':
case 'Й': {
strncat(StrOutBuf,"[ИиЙй]",65534);
break;
}
case 'к':
case 'К': {
strncat(StrOutBuf,"[КкKk]",65534);
break;
}
case 'л':
case 'Л': {
strncat(StrOutBuf,"[Лл]",65534);
break;
}
case 'м':
case 'М': {
strncat(StrOutBuf,"[МмMm]",65534);
break;
}
case 'н':
case 'Н': {
strncat(StrOutBuf,"[НнH]",65534);
break;
}
case 'о':
case 'О': {
strncat(StrOutBuf,"[ОоOo0]",65534);
break;
}
case 'п':
case 'П': {
strncat(StrOutBuf,"[Ппn]",65534);
break;
}
case 'р':
case 'Р': {
strncat(StrOutBuf,"[РрPp]",65534);
break;
}
case 'с':
case 'С': {
strncat(StrOutBuf,"[СсCc]",65534);
break;
}
case 'т':
case 'Т': {
strncat(StrOutBuf,"[ТтTt]",65534);
break;
}
case 'у':
case 'У': {
strncat(StrOutBuf,"[УуYy]",65534);
break;
}
case 'ф':
case 'Ф': {
strncat(StrOutBuf,"[Фф]",65534);
break;
}
case 'Х':
case 'х': {
strncat(StrOutBuf,"[ХхXx]",65534);
break;
} case 'ц':
case 'Ц': {
strncat(StrOutBuf,"[Цц]",65534);
break;
}
case 'ч':
case 'Ч': {
strncat(StrOutBuf,"[Чч4]",65534);
break;
}
case 'ш':
case 'Ш': {
strncat(StrOutBuf,"[шШ]",65534);
break;
}
case 'щ':
case 'Щ': {
strncat(StrOutBuf,"[Щщ]",65534);
break;
}
case 'ъ':
case 'Ъ': {
strncat(StrOutBuf,"[Ъъ]",65534);
break;
}
case 'ы':
case 'Ы': {
strncat(StrOutBuf,"[Ыы]",65534);
break;
}
case 'Ь':
case 'ь': {
strncat(StrOutBuf,"[Ььb]",65534);
break;
}
case 'э':
case 'Э': {
strncat(StrOutBuf,"[Ээ]",65534);
break;
}
case 'ю':
case 'Ю': {
strncat(StrOutBuf,"[Юю]",65534);
break;
}
case 'я':
case 'Я': {
strncat(StrOutBuf,"[Яя]",65534);
break;
}
============ cut here ===============