Квадратные скобки используются для задания диапазона возможных значений, который может принимать вид списка допустимых значений. Диапазон значений задается с помощью тире. Если диапазону предшествует символ Л, то допустимым значением становится любой символ, не входящий в последующий список значений. О таком двойственном значении этого символа необходимо помнить всегда.
Кроме списков и диапазонов, квадратные скобки могут содержать класс символов. Имена классов выделяются с обеих сторон двоеточиями. Для того чтобы подчеркнуть, что требуется указать только буквы, достаточно написать [:alpha:] . Допустимы следующие классы: alnum, alpha, blank, cntrl, digit, graph, lower, print, punct, space, upper и xdigit. Описание этих классов можно найти на man-странице функции ctype.
Наконец, две дополнительные квадратные скобки позволяют задавать начало и окончание слова - [:<:] и [:>:] . В этом смысле словом является любая последовательность алфавитно-цифровых символов и символ подчеркивания. Пример использования квадратных скобок показан в табл. 22.3.
Синтаксический анализ и обработка строк
22.4. Использование регулярных выражений в PHP-сценариях
Основной функцией, предназначенной для выполнения регулярных выражений, является функция ereg, которая проверяет строку в соответствии с регулярным выражением и возвращает значение TRUE, если шаблон, описанный в регулярном выражении, встречается в строке. Таким образом, эта функция с минимальными затратами позволяет проверить соответствие строки заданному шаблону. Например, с ее помощью можно убедиться в том, что почтовый индекс США соответствует стандарту, предусматривающему написание пяти цифр с последующим тире и еще четырьмя дополнительными цифрами.
В листинге 22.2 продемонстрирована реализация этой идеи, а на рис. 22.2 показан результирующий вывод.

Листинг 22.2. Проверка почтового индекса

<?php
/*
** Проверить почтовый индекс
** Этот сценарий проверяет почтовый индекс, который ** должен состоять из пяти цифр с необязательными ** последующими тире и четырьмя цифрами.
*/ /*
** если индекс задан, проверить его
*/
if(isset($_REQUEST['zip']))
{
if(ereg("*([0-9]{5})(-[0-9]{4})?tiny_mce_markerquot;, $_REQUEST['zip']))
{
print("{$_REQUEST['zip']} является допустимым почтовым индексом .<br>n"),-
}
else
{
print("{$_REQUEST['zip']} не <Ь>является</Ь> " .
" является допустимым почтовым индексом. <br>n");
}
}
// начальная форма
print("<form action="{$_SERVER['PHP_SELF']}">n"); print("<input type="text" name="zip">n"); print("<input type="submit">n"); print("</form>n");
?>
Синтаксический анализ и обработка строк
Этот сценарий предлагает форму для ввода почтового индекса, состоящего из пяти цифр, за которыми следуют тире и четыре цифры. Функциональность этого сценария соответствует регулярному выражению Л([0-9]{5})(-[0-9]{4})?$, которое сравнивается с пользовательским вводом. Полезно будет изучить это выражение подробнее.
Это выражение начинается с символа Л. Это означает, что сравнение строки будет производиться только сначала. Без этого почтовый индекс может начинаться с любого количества символов, как, например, строка abc12 34 5-12 34, и все равно он будет соответствовать шаблону. С другой стороны, символ доллара в конце выражения соответствует окончанию строки. Это не позволяет обнаружить соответствие для таких строк, как 12 34 5-12 34abc. Совместное использование символов Л и $ позволяет определить соответствие только строго определенных строк.
Первым субвыражением является ([0-9]{5}). Взятый в скобки диапазон позволяет указать только цифры от нуля до девяти. Фигурные скобки указывают на то, что должно быть только пять таких символов. Вторым субвыражением является (-[0-9]{4})? . Аналогично первому оно задает точно четыре цифры. Тире является символом, который должен предшествовать этим цифрам. Знак вопроса указывает на то, что все субвыражение должно либо соответствовать один раз или не соответствовать совсем. Это свидетельствует о том, что выражение, состоящее из четырех цифр, является необязательным.
Этот подход можно легко применить для проверки телефонных номеров или календарных дат. Регулярные выражения обеспечивают простой и удобный метод проверки переменных, возвращаемых формами ввода. Рассмотрим альтернативу использования вложенных операторов if и поиска строк с использованием функции strpos. 
Кроме того, существует возможность задать проверку соответствий выражений, возвращаемых в массиве. Это может пригодиться том случае, когда вы разбиваете строку на отдельные компоненты. Для демонстрации применения этого метода вполне подходит строка, которая используется браузером для самоидентификации. Данная строка содержит название браузера, версию и тип компьютера, на котором он работает. Размещение этой информации в отдельных переменных позволяет настроить Web-узел в соответствии с возможностями браузера.