Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по сетям ЭВМ4.doc
Скачиваний:
23
Добавлен:
02.05.2014
Размер:
99.84 Кб
Скачать

Подвыражения

Часто удобно разделять выражения на подвыражения, чтобы, например, можно было представить выражение “по меньшей мере одна из этих строк, за которой следует именно одна из следующих”. Это делается с помощью круглых скобок так же, как и в арифметических выражениях. Например, (very )* large соответствует строкам “large”, “very large”, “very very large” и т.д.

Количество повторений какой – либо строки можно указать с помощью числового выражения, заключенного в фигурные скобки ({}). При этом можно указывать точное число повторений {3}, диапазон повторений {2, 4} или открытый диапазон повторений {2,} (означает не менее двух повторений). Например, (very ) (1, 3) соответствует строкам “very”, “very very”, “very very very”.

Можно указать, должно ли конкретное подвыражение появляться в начале, конце или начале и конце строки. Например, следующая строка соответствует наличию подстроки bob в начале строки - ^bob; com$ - соответствует наличию данной подстроки в конце строки; ^[a-z]$ - соответствует любому одиночному символу в отдельной строке.

Ветвление

Вариант в регулярном выражении можно представить с помощью символы вертикальной черты (|).

Использование регулярных выражений в приложении Smart Form

В приложении регулярные выражения могут найти два потенциальных применения. Во-первых, – для выявления конкретных терминов в отзыве клиента. При использовании строковых функций для определения строк “shop”, “customer service” или “retail” приходилось выполнять три регулярных поиска. В случае применения регулярного выражения можно сопоставить сразу все три строки:

shop | customer service | retail

Второе применение – проверка адреса электронной почты клиента путем кодирования стандартизированного формата адреса электронной почты в регулярном выражении. Формат включает некоторые алфавитно – цифровые символы и символы пунктуации, за которыми следует символ @, затем строка алфавитно – цифровых символов или дефисов, затем точка, затем опять алфавитно – цифровые символы и дефисы и, возможно дополнительные точки, вплоть до конца строки; этот формат можно закодировать следующим образом:

^[a-zA-Z0-9_]+@[a-zA-z0-9\-]+\.[a-zA-Z0-9\-\.]+$

Если нужно сопоставить один из специальных символов таких как ., {, \ или $ перед ним необходимо поместить символ косой черты. Т.е. комбинация \. – соответствует значению “.”. Перед дефисом также поставлена косая черта, поскольку внутри квадратных символов он является специальным символом.

Поиск подстрок с помощью регулярных выражений

Поиск подстрок – основное применение регулярных выражений. В PHP существует две функции: ereg() и eregi(). Функция ereg() имеет следующий прототип:

int ereg(string pattern, string search, array [matches]);

Эта функция выполняет поиск в строке search, отыскивая в ней соответствие с регулярным выражением, определяемым в шаблоне pattern. Если соответствия будут найдены, они сохраняются в шаблоне, по одному в каждом элементе массива.

Функция eregi() идентична предыдущей, за исключением того, что она не чувствительна к регистру.

Приложение можно приспособить к использованию регулярных выражений следующим образом:

if (!ereg("^[a-zA-Z0-9_]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$", $email))

{

echo "That is not a valid email address. Please return to the"

." previous page and try again.";

exit;

}

$toaddress = "feedback@bobsdomain.com"; // значение по умолчанию

if (ereg("shop|customer service|retail", $feedback))

$toaddress = "retail@bobsdomain.com";

else if (ereg("deliver.*|fulfil.*", $feedback))

$toaddress = "fulfilment@bobsdomain.com";

else if (ereg("bill|account", $feedback))

$toaddress = "accounts@bobsdomain.com";

if (eregi("bigcustomer\.com", $email))

$toaddress = "bob@bobsdomain.com";