Последнее обновление:
Руководство по технологиии SSI
Часть 5
SSI - это Server Side Includes (технология динамической сборки сайта из его отдельных частей)
Условия и регулярные выражения
- Виды условий и их запись
- Регулярные выражения
ВИДЫ УСЛОВИЙ И ИХ ЗАПИСЬ
Раз уж нам пришлось в условии задать два значения на выбор с помощью оператора «или», пришло время рассказать и о других подобных операторах. Они используются только в условных конструкциях, но не в директивах. Их немного. Вот они:
Оператор |
Описание |
= |
Равно (сдвоенный символ появился в спецификации XSSI) |
== |
|
!= |
Не равно |
< |
Меньше |
<= |
Меньше или равно |
> |
Больше |
>= |
Больше или равно |
! |
Отрицание |
&& |
Логическое И |
|| |
Логическое ИЛИ |
Например, употребляя вместо равенства (=) неравенство (!=), наш код меню можно «перевернуть»:
<!--#if expr = "$QUERY_STRING='' || $QUERY_STRING != page1" --> <td><div class="txtmenu"><a href="index.html?page1" class="lnkmenu">Главная</a></div></td> <!--#else --> <td><div class="txtmenu">Главная</div></td> <!--#endif --> |
Здесь мы использовали операторы как соответствие или несоответствие строке, но можно использовать их и в арифметическом смысле.
Например, в скрипт форматирования даты можно добавить возможность вывода слова «воскресенье» красным цветом. В DATE_LOCAL воскресенье — «нулевой» день. В нашем скрипте номера содержатся в переменной numday. Сделаем в выводящий код маленькую добавку:
<p><b>Сегодня <!--#if expr = "$numday = 0" --> <span style="color:red;"><!--#echo var = "day" --></span>, <!--#else --> <!--#echo var = "day" -->, <!--#endif --> <!--#echo var = "date" --> <!--#echo var = "month" --> <!--#echo var = "year" --> года.</b></p> |
А можно «перевернуть», использовав сравнительный оператор «больше» (>):
<p><b>Сегодня <!--#if expr = "$numday > 0" --> <!--#echo var = "day" -->, <!--#else --> <span style="color:red;"><!--#echo var = "day" --></span>, <!--#endif --> <!--#echo var = "date" --> <!--#echo var = "month" --> <!--#echo var = "year" --> года.</b></p> |
Сегодня четверг, 16 сентября 2021 года (заходите в воскресенье и посмотрите).
РЕГУЛЯРНЫЕ ВЫРАЖЕНИЯ
Неоднократно упоминается, что в условном операторе SSI можно использовать регулярные выражения. Однако об их синтаксе ничего конкретного не сказано, только упоминается, что он аналогичен синтаксису регулярных выражений в Unix-команде egrep (забегая вперёд, отметим, что далеко не всё из этого синтаксиса поддерживает SSI).
Вообще, регулярные выражения это набор специальных символьных конструкций-шаблонов, которые замещают определённый символ, набор символов или фрагмент текста. Когда в поиске Windows нам надо найти, скажем, все файлы .mp3, которые есть на компьютере, мы набираем в строке поиска *.mp3. «Звёздочка» — это регулярное выражение.
Обычно регулярные выражения используются как для поиска, так и для замены. В SSI возможен только поиск. Потому что их можно использовать только в условии условного оператора. А сохранить их в переменной уже не получится.
Все регулярные выражения в SSI помещаются между слэшами:
/выражение/
Вот перечень типичных полезных регулярных выражений SSI:
/строка/ |
Подстрока (фрагмент большей строки). |
/^строка/ |
Подстрока в начале строки. |
/строка$/ |
Подстрока в конце строки. |
/[строка]/ |
Любая комбинация символов, присутствующих в исходной строке. |
/*/ |
Любые символы. Что бы ни нашли, всё подойдёт. |
/ст.*.ка/ |
Если мы ищем любые символы во фрагменте строки, то этот фрагмент «свободного поиска» должен быть отделён точками. |
/строка+/ |
Поиск повтора символа. Например, /е+/ возвратит истину для слов |
Разумеется, если в искомой строке есть слэш (/), его надо заэкранировать обратным слэшем: \/.
Понятно, что строкой, в которой мы производим поиск, может быть не только одно-два слова, но и большой текст. Однако, если его размер достаточно высок, регулярные выражения... могут и не сработать.