Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
n $~X – не соответствует ни одному элементу из класса X.
Токен – это подстрока, разделённая пробелом или одним из символов, перечисленных в опции OperatorChars. По умолчанию это «.:%@!^/[]+». Поэтому не рассматривайте шаблон как чистое регулярное выражение – они работают с отдельными символами, а «левая часть» правил в sendmail.cf – с токенами. То есть строка «qwe_asd» будет соответствовать регулярному выражению «.*_.*», но не шаблону «$*_$*», поскольку символ «_» не является разделителем токенов, и, следовательно, входная строка представляет собой один-единственный токен.
Преобразование можно рассматривать как некоторую процедуру, которая, получая на входе строку, совпавшую с шаблоном, выполняет над ней некоторые действия и возвращает результат. Типы возврата могут быть следующими (указывается в начале «правой части»):
n $: – перейти на следующее правило;
n $@ – выйти из данного набора правил (вернуться к точке вызова набора);
n $# – прекратить дальнейшую проверку правил.
Возврат $# OK или $@ OK (в зависимости от того, требуется ли проверка по другим наборам правил) означает «принять данное сообщение». Если возвращается $#error, то соединение разрывается с выдачей следующего за $#error сообщения (оно же записывается и в лог-файл). Кроме того, можно задать преобразование входящих данных, результат которого будет передан дальше. С помощью лексем вида $1, $2 и т. д. в правой части можно ссылаться на фрагменты шаблона (соответствующие каждой отдельной лексеме). Например, так можно преобразовать адрес вида domain.ru!user в user@domain.ru:
R$+!$+ $: $2@$1
Также в правой части часто используются следующие лексемы:
n >ruleset – вызов указанного набора правил;
n $&{macro} – выполнение указанного макроса;
n $(db args $) – проверка аргументов args по карте db.
Правила исполняются последовательно (за исключением выходов из набора по $@ и $#), каждое следующее использует в качестве входных данных выход предыдущего правила. Если входные данные шаблону не соответствуют, они проходят дальше без преобразований.
Тестирование правил
Как известно, от ошибок никто не застрахован. Синтаксис регулярных выражений, если можно так сказать, «поощряет» опечатки – один пропущенный символ экранирования перед точкой, и результат может уже довольно сильно отличаться от ожидаемого. Поэтому каждое правило имеет смысл предварительно протестировать (тем более, что разрабатывать правила вы, скорее всего, будете, ориентируясь на вполне определённые имена хостов). Сделать это можно следующим образом: