Правила подстановки сопоставляют исходный адрес с шаблоном, и если обнаружено соответствие, адрес переписывается в новом формате по правилам преобразования.
Адрес может обрабатываться правилом подстановки несколько раз, поскольку после переписывания адрес снова сравнивается с шаблоном. Если соответствие вновь обнаружено, адрес переписывается повторно. Цикл сопоставления с шаблоном и переписывания продолжается, пока адрес не перестанет соответствовать шаблону.
Шаблон определяется посредством макроопределений, классов, литералов и специальных метасимволов. Макроопределения, классы и литералы используются в качестве значений, с которыми сравниваются исходные данные, а метасимволы задают правила сравнения с шаблоном. В табл. 10.3 описаны метасимволы, используемые для поиска по шаблонам. Таблица 10.3. Метасимволы шаблонов
Символ | Значение |
$@ | Нулевое количество лексем |
$* | Нуль или более лексем |
$+ | Одна или более лексем |
$- | Ровно одна лексема |
$=X | Любая лексема из класса х |
$~x | Любая лексема не из класса х |
$x | Все лексемы из макроопределения х |
$%X | Любая лексема из карты NIS, обозначенной макроопределением х1 |
$!x | Любая лексема не из карты NIS, обозначенной макроопределением х |
$%y | Любая лексема из карты NIS hosts.byname |
Каждый метасимвол предписывает поиск определенного числа лексем. Лексема - это строка символов в адресе электронной почты, ограниченная оператором. Операторами являются символы, указанные в параметре OperatorChars. Операторы также считаются лексемами при разборе адреса. Следующий адрес электронной почты:
Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.
содержит семь лексем: becky, @, rodent, ., wrotethebook,. , а также com. Этот адрес соответствует шаблону поиска:
$-§$+
Адрес соответствует шаблону, потому что:
- в нем ровно одна лексема перед оператором то есть выполняется требование метасимвола $-;
- в нем присутствует оператор соответствующий литералу шаблона
- после оператора @ в адресе присутствует одна или более лексем, то есть выполняется требование метасимвола $+.
Многие адреса, такие как Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра. и Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра., соответствуют этому шаблону, однако далеко не все. Так, адрес rebecca.hunt@wrotet hebook.com шаблону не соответствует, поскольку оператору @ предшествуют три лексемы: rebecca,. , а также hunt . Следовательно, не выполняется требование наличия ровно одной лексемы, связанное с метасимволом $-. Мета символы, макроопределения и литералы позволяют конструировать шабло ны для поиска адресов электронной почты любого типа.
Если адрес соответствует шаблону, подстроки адреса, найденные метасимволами , сохраняютс я в неопределенных лексемах (indefinite tokens). Найденные строки называются неопределенными лексемами, поскольку могут содержать по нескольку значений лексем. Неопределенные лексемы нумеруются последовательно в соответствии с положением в шаблоне метасимволов, которому они соответствуют. Иначе говоря, неопределенная лексема, полученная по соответствию первого метасимвола, называется $1; соответствие для второго символа называется $2; для третьего - $3 и т. д. Сопоставление адреса Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра. с шаблоном $-@$+ привело к созданию двух неопределенных лексем. Первая из них обозначается как $1 и содержит одну лексему, becky, соответствующую символу $-. Вторая неопределенная лексема носит имя $2 и содержит пять лексем - rodent, ., wrotethebook, ., а также com, - соответствующих символу $+. На неопределенные лексемы, созданные при поиске по шаблону, можно ссылаться по именам ($1, $2 и т. д.) при переписывании адреса.
Некоторые из символов, описанных в табл. 10.3, используются только в особых случаях. Символ $@ используется обычно отдельно для поиска пустого адреса. Символы сравнений с картами NIS могут использоваться только в операционной системе Sun с программой sendmail из дистрибутива системы. В следующем разделе мы увидим, что системы, использующие стандартную версию sendmail, могут работать с картами NIS, но только в части преобразований, а не поиска по шаблонам.