Страница 1 из 1

sieve и regex

Добавлено: 2014-03-18 21:44:19
maximos
Стоит задача обработать письма с темой, содержащей русский текст.

Код: Выделить всё

root@server:/home/max # freebsd-version
10.0-RELEASE
Установлено:

Код: Выделить всё

dovecot-pigeonhole-0.4.2_2     Sieve plugin for the Dovecot 'deliver' LDA and LMTP
dovecot2-2.2.10                Secure and compact IMAP and POP3 servers
Проблемная часть скрипта:

Код: Выделить всё

require ["fileinto", "regex"];
if header :regex "Subject"
  ["[вВ].[чЧ].[рР]([нН][иИ][йЙ])?[[:blank:].]*([оО][тТ][чЧ].[тТ])?",
  "[уУ][тТ][рР].[нН]?([нН][иИ][йЙ])?[[:blank:].]*([оО][тТ][чЧ].[тТ])?"] {
  fileinto "Public/отчеты";
}
Тестируем:

Код: Выделить всё

 # sieve-test -C -t - -Tlevel=matching /data/private/shop/.dovecot.sieve /data/private/shop/Maildir/cur/1395164953.M702613P57293.xxx.ru,S=2649,W=2721:2,

      ## Started executing script '.dovecot'
   5: header test
   5:   starting `:regex' match with `i;ascii-casemap' comparator:
   5:   extracting `Subject' headers from message
   5:   matching value `картридж'
   5:     with regex `[вВ].[чЧ].[рР]([нН][иИ][йЙ])?[[:blank:].]*([оО][тТ][чЧ].[т...' [id=0] => 1
   5:   finishing match with result: matched
   7: jump if result is false
   7:   not jumping
   8: fileinto action
   8:   store message in mailbox `Public/отчеты'
   8: jumping to line 21
      ## Finished executing script '.dovecot'


Performed actions:

 * store message in folder: Public/отчеты

Implicit keep:

  (none)
Вот что интересно (и что побудило создать тему):
5: matching value `картридж'
5: with regex `[вВ].[чЧ].[рР]([нН][иИ][йЙ])?[[:blank:].]*([оО][тТ][чЧ].[т...' [id=0] => 1
5: finishing match with result: matched

'.' в регулярных выражениях стоят из-за странного поведения regex`a: он просто переставал отрабатывать при наличии буквы... Способа привести строку к одному регистру я пока тоже не нашел. Может, кто-то сталкивался с проблемой?

Re: sieve и regex

Добавлено: 2014-03-19 12:30:52
SiAl
maximos писал(а): Способа привести строку к одному регистру я пока тоже не нашел.

Код: Выделить всё

tr '[:lower:]' '[:upper:]'				# Преобразование в верхний регистр

Re: sieve и regex

Добавлено: 2014-03-19 12:59:54
maximos
Спасибо, натолкнули на мысль... попробую использовать vnd.dovecot.execute.

Re: sieve и regex

Добавлено: 2014-03-21 7:42:31
maximos
maximos писал(а):попробую использовать vnd.dovecot.execute.
Так и сделал. Боевое тестирование пройдено.

Код: Выделить всё

#!/bin/sh
LANG=ru_RU.UTF-8; export LANG
/usr/bin/printf "%s" "$1" | /usr/bin/grep -i '\(вечер\|утрен\?\)\(ний\)\?[[:blank:].]*\(отч[еоё]т\)\?'