# FLUIdS
Шаблоны

  - Что такое шаблон
  - Где применяются шаблоны
  - Описание шаблонов
  - Экранирование символов

| Что такое шаблон |

Шаблон - это символьная строка, в которой могут присутствовать символы со специальным значением, называемые метасимволами. Шаблон используется для сравнения с другими строками, например, с именами файлов или директорий, к индексации которых готова приступить программа flindex. От результата такого сравнения будет зависеть, проиндексирует их FLUIdS или нет.

Если в шаблоне отсутствуют метасимволы, то происходит точное посимвольное сравнение двух строк. В противном случае одному шаблону может отвечать сразу целое множество строк (в нашем примере - группа файлов с адекватными именами), именно поэтому шаблоны являются столь мощным средством конфигурирования, используемом в FLUIdS.

| Где применяются шаблоны |

В поисковой системе FLUIdS шаблоны применяются главным образом в двух местах: в директивах конфигурационных файлов и в качестве аргументов вызова дополнительных утилит. Ниже представлен список всех директив конфигурационных файлов (индексации и CGI модуля), в которых используются шаблоны:

Имя директивы | Конфигурационный блок | Смысл директивы | Конфигурационный файл
--- | --- | --- | ---
ctype | job или default | задает правила определения типа индексируемого файла | индексации
charset | job или default | задают кодировку индексируемого файла | индексации
IgnoreFileName | job или default | задает укороченные имена неиндексируемых файлов | индексации
IgnoreFullPathFile | job или default | задает полные имена неиндексируемых файлов | индексации
IgnoreDirName | job или default | задает полные имена неиндексируемых директорий | индексации
IgnoreDirWithFile | job или default | задает укороченные имена файлов, которые индексируемая директория не может содержать | индексации
RejectWords | words | определяет неиндексируемые слова | индексации
allow, disallow | index | определяют IP адреса или имена станций Интернет, с которых разрешен или запрещен доступ к данному индексу | CGI модуля
koi, win, alt, iso, sco и mac | user-agent | позволяют определить кодировку пользователя по используемому браузеру | CGI модуля
icon | templates | задает иконки, отвечающие результатам поиска | CGI модуля

| Описание шаблонов |

В FLUIdS определяются четыре разновидности метасимволов - `*`, `?`, `[]` и `{}`. Каждый метасимвол шаблона должен соответствовать некоторому набору символов из сравниваемой строки. Если такое соответствие установлено, то сравнение считается удачным. Ниже в таблице описываются метасимволы и соответствующие им наборы символов из сравниваемой строки:

`*` | означает произвольное число символов, в том числе и нулевое. Например, шаблон `/usr/www/*` будет соответствовать всем файлам (или директориям), чьи имена начинаются с /usr/www/, а шаблон `*.htm` - всем файлам с расширением htm.
`?` | задает один произвольный символ. Например, шаблон `movie.mp?` сравнивается с movie.mpg и с movie.mp3, но не сравнивается с movie.mpeg.
`[`...`]` | означает один символ из перечисленных в скобках. Например, `[aAbBcC]` задает один из символов 'a', 'A', 'b', 'B', 'c' и 'C'. Замечание: этот метасимвол имеет расширенный синтаксис, смотрите ниже.
`{`...`}` | соответствует произвольному числу символов из перечисленных в скобках (в том числе и нулевому). Например, шаблон `{abc}` будет сравниваться со строками, состоящими только из символов 'a', 'b' и 'c', или с пустой строкой. Замечание: этот метасимвол имеет расширенный синтаксис, смотрите ниже.

Введенные выше скобочные метасимволы (т.е. `[`...`]` и `{`...`}`) имеют расширенный синтаксис:

  - Если в скобках пара символов разделена знаком минус '`-`', то ей соответствует любой символ из указанного диапазона. Например:
    `[a-z]` означает строчную букву английского алфавита;
    `[a-zA-Z]{0-9a-zA-Z}` соответствует строке не короче одного символа, причем первый символ строки должен быть буквой, а остальные (если они есть) - либо буквы, либо цифры.
  Если символ '-' стоит сразу после открывающей скобки или непосредственно перед закрывающей, то он лишается своего специального значения:
    `[az-]` соответствует ровно одному символу из 'a', 'z' и '`-`'.

  - Если сразу за открывающей скобкой стоит соответствующая ей закрывающая, то последняя считается символом из набора, например:
    `[]xyz]` - любой символ из ']', 'x', 'y' и 'z';
    `{}` - ошибочный шаблон, т.к. для открывающей скобки отсутствует закрывающая (символ '`}`' здесь признается сравниваемым, а не метасимволом).

  - Если символ '`^`' является первым из перечисленных в скобках, то метасимволу ставятся в соответствие символы, не входящие в число перечисленных в скобках. Например:
    шаблон `[^ab]` сравнивается с c, но не сравнивается с b или a;
    шаблон `{^a-zA-Z}` сравнивается с .012, но не сравнивается с 012.c или 012.htm;
    `{^/}.htm` означает имя файла без префикса пути и с расширением htm.

  - Если сразу за '`^`' следует закрывающая скобка, то она будет рассматриваться как сравниваемый символ, а не как метасимвол. Например:
    шаблон `[^]` будет считаться ошибочным, а `[^]]` - верным и означающим один (любой) символ, отличный от '`]`'.

  - Внутри скобок символы '`?`' и '`*`' теряют свой специальный смысл, а экранирование возможно:
    `{?\\\}}` означает любую последовательность символов (в том числе и пустую), состоящую только из знаков вопросов, обратных косых черт и закрывающих фигурных скобок.

  - Последовательности символов '\n', '\r' и '\t' (т.е. экранираванные символы 'n', 'r' и 't') внутри скобок означают соответственно "перевод строки", "возврат каретки" и "табуляцию".

Если в шаблоне со скобочным метасимволом отсутствует его закрывающая скобка, то шаблон признается ошибочным, а любое его сравнение со строкой - неудачным.

Замечание 1: при сравнениях шаблонов и имен файлов символы `/` и `.` в именах файлов (т.е. символ-разделитель имен поддиректорий и символ, ответственный за выделение расширения из имени файла) считаются обычными символами (в конфигурационных файлах Web сервера Apache это не совсем так).
Замечание 2: если в файловой системе символ-разделитель - обратная косая черта (DOS или MS Windows), то при записи шаблона его надо заэкранировать (получается как бы удвоение этого символа).

В среде UNIX давно используются метасимволы `*`, `?` и `[]`. Для большей гибкости в FLUIdS к ним добавлен `{}`.

| Экранирование символов |

Если есть необходимость задания в шаблоне обычного символа, совпадающего по написанию с метасимволом, то его нужно заэкранировать. Это делается путем вставки перед ним символа `\` (обратная косая черта). Это, кстати, относится и к самому символу `\` :

`c:\\my\ docs\\who\?.*`

В этом шаблоне `\` экранирует сам себя, пробел и знак вопроса.

Кроме того, в директивах конфигурационных файлов FLUIdS обратная косая черта способна экранировать любой другой символ, в том числе и символ `"` (двойные кавычки), служащий для разделения элементов строки. Так, директива

`IgnoreFileNames "*\"*"`

будет означать запрет на индексацию файлов, чьи имена содержат `"`.

На предыдущую страницу | valera@sbnet.ru