8. Регулярные выражения
Exim поддерживает использование регулярных выражений во многих своих опциях. Используется библиотека регулярных выражений PCRE; это обеспечивает совместимость регулярных выражений с perl5. Синтаксис и семантика регулярных выражений обсуждаются во многих книгах по perl, и также в Jeffrey Friedl's Mastering Regular Expressions, изданной O'Reilly (смотрите http://www.oreilly.com/catalog/regex2/).
“
Документация о синтаксисе и семантике регулярных выражений включена в текстовом формате в файле
doc/pcrepattern.txt
” дистрибутива exim, а также в HTML тарболле (архив tar`a - прим. lissyara) документации exim. Там подробно описываются особенности поддержки регулярных выражений PCRE, таким образом нет необходимости включать дальнейшее описание тут. Функции PCRE вызываются из exim`a использованием дефолтовых опций настройки (т.е. без установленной опции PCRE), за исключением того, что опция
“PCRE_CASELESS
” установлена, когда используется соответствие без учёта регистра.
“
В большинстве случаев, когда регулярные выражения требуются в конфигурации exim`a, они должны начинаться с крышки (^
”), для того чтобы отличить их от простого текста, или заканчиваться
“безразличным символом
”. В этом примере конфигурационных настроек, второй элемент в списке разделённом двоеточиями, - регулярное выражение.
|
Удвоение обратного слэша требуется, поскольку раскрытие строки предшествует интерпретации - смотрите раздел 11.1 для подробного рассмотрения этой темы, и способов не удваивать обратные слэши. Регулярное выражение, использующееся в этом примере, в конечном счёте содержит только один обратный слэш. Крышка включена в него, и её нормальный эффект -
“постановка на якорь
” выражения в начале строки.
“
Однако, есть два случая, когда где крышка не требуется для распознания регулярного выражения: это условие match
” в строке раскрытия и условие
“matches
” в файле фильтра exim. В этих случаях, уместная строка всегда обрабатывается как регулярное выражение; если выражение не начинается с крышки, то оно не поствлено на якорь и может соответствовать в любом месте строки объекта.
“
Во всех случаях, если вы хотите, чтобы регулярное выражение совпадало с концом строки, вы можете использовать метасимвол $
” для указания этого. Например:
|
совпадает с доменом
“
123.example
”, но также соответствует
“
123.example.com
”. Вам нужно использовать:
|
если вы хотите чтобы
“
example
” был доменом высшего уровня. Обратный слэш перед
“$
” необходим, поскольку раскрытие строки также интерпретирует символ доллара.
8.1 Тестирование регулярных выражений
Программа называемая
“
pcretest
” является частью дистрибутива PCRE и собирается с PCRE в процессе сборки exim. После сборки exim`a бинарник может быть найден в директории где собирался exim (если она не проинсталлилась где-то автоматически). Существует документация для различных опций в
“
doc/pcretest.txt
”, но для одиночного теста она не требуется. Это - вывод образца запуска
“
pcretest
”:
|
Ввод пользователя показан жирным шрифтом. После подсказки
“re>
”, ожидается регулярное выражение внутри разделителей. Если оно компилится без ошибок, даётся подсказка
“data>
” напротив строки соответствующей выражению. Пустая линия приводит к чтению нового регулярного выражения. Если было успешной совпадение, показываются зафиксированные значения подстроки (то есть, что было бы в переменных 0 $, 1 $, 2 $, и т. д.). Вышеупомянутый пример проверяет на адрес электронной почты, домен которого заканчивается или
“ac
” или
“edu
”, сопровождаемым двухсимвольным вышестоящим доменом, который не
“kr
”. Локальная часть находится в $1 и
“ac
” или
“edu
” в $2.
=============
Автор перевода: lissyara, оригинал: http://www.lissyara.su/?id=1200