Courier Mail Server Forum Index Courier Mail Server
www.courierms.ru
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Обработка. Регулярные выражения.

 
Post new topic   Reply to topic    Courier Mail Server Forum Index -> Courier Mail Server 2.xx
View previous topic :: View next topic  
Author Message
Danilnemo
Newbie
Newbie


Joined: 25 Nov 2008
Posts: 7

PostPosted: 25 Nov 2008 23:29 (Tue)    Post subject: Обработка. Регулярные выражения. Reply with quote

Фрагмент лога:

~25.11.2008 20:04:01 08M5 A/S check [Subject:"Служба"|Subject:"CЛУЖБА"|Subject:"Cлyжбa"|Subject:"CЛYЖБА"|Subject:"Слуба"] is False
~25.11.2008 20:04:01 08M5 A/S check [Subject:("С"|"С")&("e"|"е")&("m"|"м")&"и"&("h"|"н")&("a"|"а")&("p"|"р")] is True
25.11.2008 20:04:01 08M5 Антиспам (чёрный список): [Subject:("С"|"С")&("e"|"е")&("m"|"м")&"и"&("h"|"н")&("a"|"а")&("p"|"р")]
@25.11.2008 20:04:01 08M5 Письмо 1 от <admin@local.domain> отклонено антиспамом (Тема: тест)

Возникает вопрос: почему сработал фильтр?
Слово "тест" (русскими буквами) не содержится в "Семинар" (латиница первой в правиле стоит, затем кирилица)
Здесь не сработал приоритет операций И и ИЛИ? (То есть скобки были просто игнорированы?)
Сократил правило до более короткого и опять =(

~25.11.2008 21:54:13 08QP A/S check [Subject"С"|"С")&("e"|"е")] is True
25.11.2008 21:54:13 08QP Антиспам (чёрный список): [Subject"С"|"С")&("e"|"е")]
@25.11.2008 21:54:13 08QP Письмо 1 от <admin@local.domain> отклонено антиспамом (Тема: тест)

Хочется узнать
1) про приоритеты выполнения операторов? (существует ли кроме доминирования И над ИЛИ какой либо другой приоритет выполнения)
2) что с приоритетом выражений в скобках? (подразумевается ли их обработка в принципе и соотв если да то наивысший ли приоритет?)
Back to top
View user's profile Send private message
Danilnemo
Newbie
Newbie


Joined: 25 Nov 2008
Posts: 7

PostPosted: 26 Nov 2008 22:19 (Wed)    Post subject: Reply with quote

хотелось бы узнать коментарии разработчиков Embarassed
Back to top
View user's profile Send private message
GrAnd
CMS Master
CMS Master


Joined: 21 Oct 2005
Posts: 766
Location: г. Коломна

PostPosted: 27 Nov 2008 11:52 (Thu)    Post subject: Reply with quote

Разработчики ничего не скажут, потому что CMS не поддерживает язык регулярных выражений. Никаких скобок, палок, звездочек он не понимает. Синтаксис правил там самый простейший. Прочитать можно в справке по CMS.
_________________
Все, что началось хорошо, закончится плохо.
Все, что началось плохо, закончится еще хуже.
Если вам кажется, что все идет хорошо, значит вы чего-то не замечаете.
Если все закончилось хорошо, то, значит, это еще не конец!
Back to top
View user's profile Send private message
PWL
CMS Developer
CMS Developer


Joined: 15 Oct 2005
Posts: 689

PostPosted: 27 Nov 2008 12:13 (Thu)    Post subject: Reply with quote

Скобки нельзя использовать.

Смотрим справку.

Условие имеет вид:
поле1:"строка1" & поле2!:"строка2" | поле3:"строка3" ...,

А тут вы двоеточие забыли после Subject (да и со скобками у вас напутано, даже если бы они играли роль)
~25.11.2008 21:54:13 08QP A/S check [Subject"С"|"С")&("e"|"е")] is True
Back to top
View user's profile Send private message
Danilnemo
Newbie
Newbie


Joined: 25 Nov 2008
Posts: 7

PostPosted: 27 Nov 2008 13:03 (Thu)    Post subject: Reply with quote

GrAnd wrote:
.. Прочитать можно в справке по CMS.

Справку изучал, но понял по своему. =)

PWL wrote:

А тут вы двоеточие забыли после Subject (да и со скобками у вас напутано, даже если бы они играли роль)
~25.11.2008 21:54:13 08QP A/S check [Subject"С"|"С")&("e"|"е")] is True


Да с двоеточием тут беда. пропало два знака при копировании : ( , через аську копировал там смайлом отобразило и опять не скопировало. Ну да ладно, суть от этого не поменялась. Можно посмотреть и на первое, более длинное правило.
Хотелось бы задавать правило таким образом, что бы не перечислять все возможные варианты написания слова из кириллических и латинских букв, а использовать нечто более короткое.
Добавление регулярных выражений в новую версию CMS 2.07 =) (даже не в полном объеме ) помогло бы делу борьбы со спамом очень значительно. После покупки 50 лицензий количество пользователей уже достигло 30 и спама соответственно тоже стало не мало. Использовать нечто стороннее для обработки не хотелось бы.
Back to top
View user's profile Send private message
PWL
CMS Developer
CMS Developer


Joined: 15 Oct 2005
Posts: 689

PostPosted: 01 Dec 2008 15:24 (Mon)    Post subject: Reply with quote

Danilnemo wrote:
Ну да ладно, суть от этого не поменялась. Можно посмотреть и на первое, более длинное правило.


Ну а это правило

25.11.2008 20:04:01 08M5 Антиспам (чёрный список): [Subject:("С"|"С")&("e"|"е")&("m"|"м")&"и"&("h"|"н")&("a"|"а")&("p"|"р")]
@25.11.2008 20:04:01 08M5 Письмо 1 от <admin@local.domain> отклонено антиспамом (Тема: тест)

сработало потому что программа его разобрала по синтаксису как:
Subject:"С" - буква "С" содержится в "тест" (проверка регистронезависимая) (и кстати там всет ки "С" кириллица первая у вас, я скопировал в файлик и глянул в hex-редакторе код 91, да и вторая "С" - тож кириллица).
Back to top
View user's profile Send private message
Danilnemo
Newbie
Newbie


Joined: 25 Nov 2008
Posts: 7

PostPosted: 01 Dec 2008 16:06 (Mon)    Post subject: Reply with quote

PWL wrote:


Ну а это правило

25.11.2008 20:04:01 08M5 Антиспам (чёрный список): [Subject:("С"|"С")&("e"|"е")&("m"|"м")&"и"&("h"|"н")&("a"|"а")&("p"|"р")]
@25.11.2008 20:04:01 08M5 Письмо 1 от <admin@local.domain> отклонено антиспамом (Тема: тест)

сработало потому что программа его разобрала по синтаксису как:
Subject:"С" - буква "С" содержится в "тест" (проверка регистронезависимая) (и кстати там всет ки "С" кириллица первая у вас, я скопировал в файлик и глянул в hex-редакторе код 91, да и вторая "С" - тож кириллица).


Приятно осознавать, что общаешься со вдумчивым собеседником! Cool
Первоначально задумка состояла в том что бы проверять в правиле на присутствие как кириллицы так и латинских визуально похожих символов. Да тут и сам попался.
А все-таки, на данном этапе реализации обработки, возможно ли использовать какой то аналог регулярным выражениям? То есть не перечислять все варианты слова (как в данном случае слово семинар)
Подозреваю что нет, но все же надеюсь на пояснения.
Back to top
View user's profile Send private message
GrAnd
CMS Master
CMS Master


Joined: 21 Oct 2005
Posts: 766
Location: г. Коломна

PostPosted: 01 Dec 2008 16:36 (Mon)    Post subject: Reply with quote

Увы ... В настоящее время такой возможности пока что нет. Сам я забил 66 здоровенных сложных правила на различные комбинации русских и латинских букв. Сначала наваял простенькую прожку, которые эти правила сформировала. Потом перенес их в настройки.
Причем, разумеется, думать какие буквосочетания в русском языке реально встречаются, а какие нет, мне было недосуг. Поэтому, наверняка, часть из этих правил, или их подчасти - мертвые. Тем не менее, только за вторую половину пятницы данные правила сработали более тридцати раз. Не очень много, но свою лепту в общую копилку внесли.
Если крайне необходимо, а заниматься обезьяньей работой желания нет, то могу выслать в личку. Пиши.

В то же время, все то же самое можно было бы сделать одним далеко не сложным правилом с использованием регулярных выражений.:
Subject:"[A-Za-z][А-Яа-я]"|Subject:"[А-Яа-я][A-Za-z]"
или чем-то подобным.

Впрочем, кажется с разработчиками нам удалось прийти к консенсусу. Будем ждать результатов в следующем году.

_________________
Все, что началось хорошо, закончится плохо.
Все, что началось плохо, закончится еще хуже.
Если вам кажется, что все идет хорошо, значит вы чего-то не замечаете.
Если все закончилось хорошо, то, значит, это еще не конец!


Last edited by GrAnd on 02 Dec 2008 14:12 (Tue); edited 1 time in total
Back to top
View user's profile Send private message
Danilnemo
Newbie
Newbie


Joined: 25 Nov 2008
Posts: 7

PostPosted: 02 Dec 2008 11:41 (Tue)    Post subject: Reply with quote

GrAnd wrote:
....
Сначала наваял простенькую прожку, которые эти правила сформировала. Потом перенес их в настройки.
....

странно но под вечер меня тож посетила идея по поводу простенького скрипта с результирующей строкой для вставки в антиспам Embarassed
GrAnd wrote:
....
Если крайне необходимо, а заниматьмя обезьяньей работой желания нет, то могу выслать в личку.

Может создать отдельную тему? Соотв. в неё выкладывать только правила. Как не однократно убеждался на собственном опыте коллективные размышления на определенную тему бывают зачастую продуктивней нежели одиночные =)
Опять же обмен опытом.. Cool
GrAnd wrote:
....
В то же время, все то же самое можно было бы сделать одним далеко не сложным правилом с использованием регулярных выражений.:
Subject:"[A-Za-z][А-Яа-я]"|Subject:"[А-Яа-я][A-Za-z]"
или чем-то подобным.

То есть, правило будет срабатывать увидев хотя бы две раскладки в теме письма? Ммм.. мысль интересна! Лучше если придется проверять не весь алфавит, а слово либо словоформу.
GrAnd wrote:
....
Впрочем, кажется с разработчиками нам удалось прийти к консенсусу. Будем ждать результатов в следующем году.

Это гуд! зер гуд!
Лучшим решением при реализации регулярных выражений будет(имхо):
-оставить проверку во всех кодировках
-сделать вариант как с регистро зависимым так и не зависимым поиском (например проверка: "а"= "а" и "А" , "^а"="а", "^А"="А" или др спец символ)
Back to top
View user's profile Send private message
GrAnd
CMS Master
CMS Master


Joined: 21 Oct 2005
Posts: 766
Location: г. Коломна

PostPosted: 02 Dec 2008 14:05 (Tue)    Post subject: Reply with quote

Danilnemo wrote:
Может создать отдельную тему? Соотв. в неё выкладывать только правила. Как не однократно убеждался на собственном опыте коллективные размышления на определенную тему бывают зачастую продуктивней нежели одиночные =)
Опять же обмен опытом.. Cool

Это вряд ли. Универсальные правила все стараются держать в секрете. Может быть, это и паранойя. Но я уже пару раз замечал - стоит описать какую-то особенность в полях заголовка, так тут же спамеры исправляются и данное правило перестает работать. Наверное, спамеры тоже читают форумы.
Ну а неуниверсальные правила у каждого свои. И едва ли многим понадобятся. Например, специфика нашего предприятия такая, что с виагрой оно совсем не завязано. Поэтому можно смело рубить письма с таким словом в теме. С другой стороны, для аптечной сети эти письма вполне допустимы.
Danilnemo wrote:
То есть, правило будет срабатывать увидев хотя бы две раскладки в теме письма? Ммм.. мысль интересна! Лучше если придется проверять не весь алфавит, а слово либо словоформу.

Не совсем так. Правило будет срабатывать, если найдет хоть одно двухбуквенное сочетание из символов в различной кодировке и в любом порядке.
Danilnemo wrote:
Лучшим решением при реализации регулярных выражений будет(имхо):
-оставить проверку во всех кодировках
-сделать вариант как с регистро зависимым так и не зависимым поиском (например проверка: "а"= "а" и "А" , "^а"="а", "^А"="А" или др спец символ)

Думаю, не стоит городить огород. В настоящее время существуют два близких стандарта de facto языка регулярных выражений - POSIX ERE (расширенный язык регулярных выражений для UNIX-совместимых систем) и PCRE (Perl-совместимый язык регулярных выражений). Последний, кстати говоря, имеет реализации для многих языков программирования, в том числе для Delphi, C, PHP и пр. Является ли регулярное выражение регистрозависимым или регистронезависимым устанавливается при помощи модификаторов через интерфейсные функции соответствующих библиотек или включением их в регулярное выражение.

_________________
Все, что началось хорошо, закончится плохо.
Все, что началось плохо, закончится еще хуже.
Если вам кажется, что все идет хорошо, значит вы чего-то не замечаете.
Если все закончилось хорошо, то, значит, это еще не конец!
Back to top
View user's profile Send private message
Danilnemo
Newbie
Newbie


Joined: 25 Nov 2008
Posts: 7

PostPosted: 02 Dec 2008 17:17 (Tue)    Post subject: Reply with quote

GrAnd wrote:

.. Может быть, это и паранойя. Но я уже пару раз замечал - стоит описать какую-то особенность в полях заголовка, так тут же спамеры исправляются и данное правило перестает работать. Наверное, спамеры тоже читают форумы.

Де факто, спамеры - это такие же люди, две руки две ноги, вот работа у них не совсем удачная =( Хотя деньги каждый зарабатывает как умеет.

GrAnd wrote:
Danilnemo wrote:
Лучшим решением при реализации регулярных выражений будет(имхо):
-оставить проверку во всех кодировках
-сделать вариант как с регистро зависимым так и не зависимым поиском (например проверка: "а"= "а" и "А" , "^а"="а", "^А"="А" или др спец символ)


Является ли регулярное выражение регистрозависимым или регистронезависимым устанавливается при помощи модификаторов через интерфейсные функции соответствующих библиотек или включением их в регулярное выражение.

включением их в регулярное выражение.
это я бы и хотел увидеть. не всегда удобна именно регистронезависимость.
Back to top
View user's profile Send private message
GrAnd
CMS Master
CMS Master


Joined: 21 Oct 2005
Posts: 766
Location: г. Коломна

PostPosted: 02 Dec 2008 17:43 (Tue)    Post subject: Reply with quote

Danilnemo wrote:
включением их в регулярное выражение.
это я бы и хотел увидеть. не всегда удобна именно регистронезависимость.

Из справки к реализации PCRE для Delphi (библиотека RegExpr):
Code:
Модификаторы

Модификаторы служат для изменения режимов работы TRegExpr.

Вы можете изменять модификаторы несколькими способами.

Любой модификатор может меняться с помощью специальной конструкции (?...) внутри регулярного выражения.

...

i

Регистро-независимый режим (по умолчанию использует выбранный в ОС язык по умолчанию), (см. также InvertCase)

...

(?imsxr-imsxr)

Позволяет изменять значения модификаторов

Примеры:

  (?i)Saint-Petersburg       находит 'Saint-petersburg' и 'Saint-Petersburg'

  (?i)Saint-(?-i)Petersburg  находит 'Saint-Petersburg' но не 'Saint-petersburg'

  (?i)(Saint-)?Petersburg    находит 'Saint-petersburg' и 'saint-petersburg'

  ((?i)Saint-)?Petersburg    находит 'saint-Petersburg', но не 'saint-petersburg'

Примеры, правда, слегка корявые.

Так что, не переживайте. Если будут регулярные выражения, то регистрозависимость уж как-нибудь можно будет обеспечить.

_________________
Все, что началось хорошо, закончится плохо.
Все, что началось плохо, закончится еще хуже.
Если вам кажется, что все идет хорошо, значит вы чего-то не замечаете.
Если все закончилось хорошо, то, значит, это еще не конец!
Back to top
View user's profile Send private message
Danilnemo
Newbie
Newbie


Joined: 25 Nov 2008
Posts: 7

PostPosted: 02 Dec 2008 18:55 (Tue)    Post subject: Reply with quote

GrAnd wrote:
Так что, не переживайте. Если будут регулярные выражения, то регистрозависимость уж как-нибудь можно будет обеспечить.


Да не то что бы уж как кровь износу нужно =) но хотелось бы видеть в первом приближении.
Будем ждать релиза нового.
Back to top
View user's profile Send private message
InFreeBSD
Subscriber
Subscriber


Joined: 11 May 2012
Posts: 17
Location: Украина

PostPosted: 16 Oct 2012 12:58 (Tue)    Post subject: Reply with quote

Вижу тема старая (2008 год), не знаю какие недоработки тогда были в антиспам фильтрах, но сейчас на версии 2.12 непонятно, противоречие в справке.

Здесь Вы пишете, что двойные кавычки должны быть продублированны "", вместо экранирования \" . это относится к регулярным выражениям?
Цитата:
Если в строке встречается символ двойной кавычки — '"', то он должен быть продублирован: '""'. При проверке условия эти символы рассматриваются как один символ. Символы маски "*" и "?" не поддерживаются, данные символы рассматриваются как часть строки.
Символ "*" перед именем поля означает, что строка представляет собой регулярное выражение. В этом случае символ ":" читается как "содержит подстроку, соответствующую регулярному выражению", "!:" — как "не содержит подстроку, соответствующую регулярному выражению". По умолчанию, проверка соответствия — регистронезависимая (модификатор "i" установлен).
Например, условие

To!:"user@mail.ru" & (Cc:"" | *Subject:"тест N""[0-9]""")

трактуется как:

... поле Subject (Тема) содержит подстроку, соответствующую регулярному выражению "тест N"[0-9]""). ...

Конец цитаты.

Если да, то как быть с повторителями, если нельзя использовать ? и * ? Это вытекает из указанного выше примера.

Цитата:
...
В CMS используется подмножество синтаксических элементов широко распространённого стандарта PCRE (Perl Compatible Regular Expressions).
...
Повторители
...
* — ноль или более раз (эквивалентно "{0,}").
+ — один или более раз (эквивалентно "{1,}").
? — ноль или один раз (эквивалентно "{0,1}").
Конец цитаты.

Да, еще, как отключить модификатор "i"?
Back to top
View user's profile Send private message Visit poster's website
NAMOR
CMS Developer


Joined: 15 Oct 2005
Posts: 1079

PostPosted: 16 Oct 2012 14:13 (Tue)    Post subject: Reply with quote

InFreeBSD wrote:
Здесь Вы пишете, что двойные кавычки должны быть продублированны "", вместо экранирования \" . это относится к регулярным выражениям?

Относится. Но что дублирование делается "вместо экранирования" — это вы сами придумали.
Кстати, экранировать кавычки в регулярном выражении не обязательно, т. к. они не являются спецсимволом.

InFreeBSD wrote:
Цитата:
Если в строке встречается символ двойной кавычки — '"', то он должен быть продублирован: '""'. При проверке условия эти символы рассматриваются как один символ. Символы маски "*" и "?" не поддерживаются, данные символы рассматриваются как часть строки.
Символ "*" перед именем поля означает, что строка представляет собой регулярное выражение. В этом случае символ ":" читается как "содержит подстроку, соответствующую регулярному выражению", "!:" — как "не содержит подстроку, соответствующую регулярному выражению". По умолчанию, проверка соответствия — регистронезависимая (модификатор "i" установлен).
Например, условие

To!:"user@mail.ru" & (Cc:"" | *Subject:"тест N""[0-9]""")

трактуется как:

... поле Subject (Тема) содержит подстроку, соответствующую регулярному выражению "тест N"[0-9]""). ...

Вы сами процитировали ответ на ваш вопрос. В примере, в строке регулярного выражения кавычки продублированы. Вывод: дублирование кавычек относится и к регулярным выражениям.

InFreeBSD wrote:
Если да, то как быть с повторителями, если нельзя использовать ? и * ? Это вытекает из указанного выше примера.

Т. е. если в примере что-то не используется, значит это вообще нельзя использовать?
Разве эта фраза в справке:
"Символы маски "*" и "?" не поддерживаются, данные символы рассматриваются как часть строки."
говорит о том, что указанные символы нельзя использовать?
Как символы маски они работать не будут, вот о чём она говорит.
С повторителями быть так: использовать их, когда нужно.

InFreeBSD wrote:
Да, еще, как отключить модификатор "i"?

Справка CMS wrote:
Модификаторы
...
Установка модификатора: "(?i)". Сброс: "(?-i)".
Back to top
View user's profile Send private message Send e-mail Visit poster's website
Display posts from previous:   
Post new topic   Reply to topic    Courier Mail Server Forum Index -> Courier Mail Server 2.xx All times are GMT + 4 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum


Powered by phpBB © 2001, 2005 phpBB Group