Мы — долго запрягаем, быстро ездим, и сильно тормозим.
www.lissyara.su —> документация —> EXIM —> 4.62 —> часть 8

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, они должны начинаться с крышки (
^), для того чтобы отличить их от простого текста, или заканчиваться безразличным символом. В этом примере конфигурационных настроек, второй элемент в списке разделённом двоеточиями, - регулярное выражение.
domains = a.b.c : ^\\d{3} : *.y.z : ...

   Удвоение обратного слэша требуется, поскольку раскрытие строки предшествует интерпретации - смотрите раздел 11.1 для подробного рассмотрения этой темы, и способов не удваивать обратные слэши. Регулярное выражение, использующееся в этом примере, в конечном счёте содержит только один обратный слэш. Крышка включена в него, и её нормальный эффект - постановка на якорь выражения в начале строки.
   Однако, есть два случая, когда где крышка не требуется для распознания регулярного выражения: это условие
match в строке раскрытия и условие matches в файле фильтра exim. В этих случаях, уместная строка всегда обрабатывается как регулярное выражение; если выражение не начинается с крышки, то оно не поствлено на якорь и может соответствовать в любом месте строки объекта.
   Во всех случаях, если вы хотите, чтобы регулярное выражение совпадало с концом строки, вы можете использовать метасимвол
$ для указания этого. Например:
domains = ^\\d{3}\\.example

совпадает с доменом 123.example, но также соответствует 123.example.com. Вам нужно использовать:
domains = ^\\d{3}\\.example\$

если вы хотите чтобы example был доменом высшего уровня. Обратный слэш перед $ необходим, поскольку раскрытие строки также интерпретирует символ доллара.

8.1 Тестирование регулярных выражений

   Программа называемая pcretest является частью дистрибутива PCRE и собирается с PCRE в процессе сборки exim. После сборки exim`a бинарник может быть найден в директории где собирался exim (если она не проинсталлилась где-то автоматически). Существует документация для различных опций в doc/pcretest.txt, но для одиночного теста она не требуется. Это - вывод образца запуска pcretest:
  re> /^([@]+)@.+\.(ac|edu)\.(?!kr)[a-z]{2}$/
data> x@y.ac.uk
 0: x@y.ac.uk
 1: x
 2: ac
data> x@y.ac.kr
No match
data> x@y.edu.com
No match
data> x@y.edu.co
 0: x@y.edu.co
 1: x
 2: edu

Ввод пользователя показан жирным шрифтом. После подсказки re>, ожидается регулярное выражение внутри разделителей. Если оно компилится без ошибок, даётся подсказка data> напротив строки соответствующей выражению. Пустая линия приводит к чтению нового регулярного выражения. Если было успешной совпадение, показываются зафиксированные значения подстроки (то есть, что было бы в переменных 0 $, 1 $, 2 $, и т. д.). Вышеупомянутый пример проверяет на адрес электронной почты, домен которого заканчивается или ac или edu, сопровождаемым двухсимвольным вышестоящим доменом, который не kr. Локальная часть находится в $1 и ac или edu в $2.


=============
translated by lissyara





 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.0314 секунд
Из них PHP: 21%; SQL: 79%; Число SQL-запросов: 56 шт.
Исходный размер: 16212; Сжатая: 5090