sieve и regex

Простые/общие вопросы по UNIX системам. Спросите здесь, если вы новичок

Модераторы: vadim64, terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
maximos
рядовой
Сообщения: 20
Зарегистрирован: 2012-12-12 10:40:30

sieve и regex

Непрочитанное сообщение maximos » 2014-03-18 21:44:19

Стоит задача обработать письма с темой, содержащей русский текст.

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

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: он просто переставал отрабатывать при наличии буквы... Способа привести строку к одному регистру я пока тоже не нашел. Может, кто-то сталкивался с проблемой?

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

SiAl
рядовой
Сообщения: 32
Зарегистрирован: 2012-05-25 10:32:00

Re: sieve и regex

Непрочитанное сообщение SiAl » 2014-03-19 12:30:52

maximos писал(а): Способа привести строку к одному регистру я пока тоже не нашел.

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

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

maximos
рядовой
Сообщения: 20
Зарегистрирован: 2012-12-12 10:40:30

Re: sieve и regex

Непрочитанное сообщение maximos » 2014-03-19 12:59:54

Спасибо, натолкнули на мысль... попробую использовать vnd.dovecot.execute.

maximos
рядовой
Сообщения: 20
Зарегистрирован: 2012-12-12 10:40:30

Re: sieve и regex

Непрочитанное сообщение maximos » 2014-03-21 7:42:31

maximos писал(а):попробую использовать vnd.dovecot.execute.
Так и сделал. Боевое тестирование пройдено.

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

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