- •Переменные
- •Внешние переменные
- •Константы
- •Типы данных в рнр. Преобразование типов
- •Операторы
- •2. Операторы языка php Операторы выбора/ if...Else
- •Операторы выбора/ Переключатель switch
- •Операторы цикла
- •Операторы цикла/ While
- •Операторы цикла/ Do…while
- •Операторы цикла/ For
- •3. Строковые функции php
- •Функция htmlspecialchars
- •Функции поиска в тексте
- •Функции strlen(), chr() и ord()
- •Trim-функции (функции удаления пробельных символов)
- •Функции форматного вывода. Спецификаторы преобразования
- •Функция sscanf()
- •Функции преобразования кодировки
- •Функции работы с бинарными данными
- •Функции работы с блоками текста
- •Функции объединения/разделения строк
- •Функции сравнения строк
- •Функции работы с url
- •Функции преобразования регистра
- •Заключение к главе 3
- •4. Массивы Инициализация массивов
- •Цикл foreach для обхода массивов
- •Многомерные массивы
- •Функция count()
- •Функция in_array()
- •Функция reset()
- •Функции сортировки массивов
- •Работа с курсором (указатель) массива
- •Функция array_walk()
- •Функции Определения и вызовы функций
- •Время жизни переменной
- •Что такое рекурсия
- •Работа с файлами Открытие файлов
- •Отображение файлов
- •Закрытие файлов
- •Чтение из файлов и запись в файлы Чтение из файлов
- •Запись в файлы
- •Копирование, переименование и удаление файлов
- •Атрибуты файлов
- •Перемещение по файлам
- •Работа с каталогами
- •Методы put и post
- •7. Регулярные выражения
- •Базовый синтаксис и создание регулярных выражений
- •Групповой символ
- •Исключающее выражение
- •Квалификаторы
- •Границы
- •Подвыражения
- •Соответствие началу и концу строки
- •Сопоставление со специальными символами
- •Классы символов
- •Функции для работы с регулярными выражениями
- •Perl-совместимые регулярные выражения
- •8. Сессии и cookie в php Сессии (сеансы) в php
- •Открытие сессии
- •Регистрация переменных сессии
- •Закрытие сессии
- •Пример простой сессии
- •Установка cookies
- •Пример простого приложения с cookies
- •Установка срока годности cookies
- •Удаление cookie
- •Проблемы безопасности, связанные с cookies
- •Установка области видимости cookie
- •Шифрование
- •Ограничение доступа для доменов
- •Отправка cookies по защищенному запросу
- •9. Работа с ftp средствами php Основные возможности php при работе с ftp
- •Соединение с ftp-сервером
- •Регистрация на ftp-сервере
- •Закрытие соединения
- •Загрузка файлов с сервера
- •Другие возможности при работе с ftp
- •Переход в родительский каталог
- •Работа через брандмауэр
- •10. Проверка корректности данных Проверка корректности данных
- •Проверка на пустоту поля
- •Проверка допустимости вводимых данных
- •Удаление html - тегов и обратных слешей
- •11. Пишем гостевую книгу на php
- •Добавление записи
- •Реляционные базы данных
- •Индексы
- •Первичные ключи
- •Способы задания первичного ключа
- •Нормализация базы данных
- •Работа с сервером MySql
- •Язык sql
- •Команды sql
- •Типы полей базы данных
Perl-совместимые регулярные выражения
PHP поддерживает ряд функций для работы с Perl-совместимыми регулярными выражениями (PCRE - Perl Compatible Regular Expression). Такие выражения заключаются в ограничители, в качестве которых, как правило, используется прямой слеш:
/mail/
Это выражение соответствует строке, содержащей слово "mail".
За ограничителями могут следовать модификаторы, уточняющие регулярное выражение. Наиболее часто используют следующие модификаторы:
i (Игнорировать регистр при поиске соответствия. Т. е. выражение "/mail/i" будет соответствовать как строке "MAIL", так и строке "mail".);
x (Игнорировать пробельные символы).
Для PCRE-выражений характерно применение общих типов символов, которые аналогичны классам символов для регулярных выражений в стиле POSIX. Наиболее часто встречающиеся общие типы символов приведены ниже.
\d - соответствие десятичной цифре
\D - соответствие любому символу, за исключением десятичных цифр
\s - соответствие пробельным символам
\S - соответствие любым символам, кроме пробельных
\h - наличие границы слова
\B - отсутствие границы слова
\Z - конец строки или символ перевода конца строки
\A - начало строки
Теперь рассмотрим основные функции, которые есть в PHP для работы с PCRE-выражениями.
preg_match()
int preg_match (string pattern, string subject [, array matches])
Эта функция ищет в строке subject соответствие регулярному выражению pattern. Если задан необязательный параметрmatches, то результаты поиска помещаются в массив.
Приведем несколько примеров.
<?
$str = "PHP один из лучших языков программирования для Web";
if (preg_match ("/php/i", $str))
{
echo("Соответствие найдено");
}
else
{
echo("Соответствие не найдено");
}
?>
Результат:
Соответствие найдено
<?
$str = "PHP один из лучших языков программирования для Web";
if (preg_match ("/\bweb\b/i", $str))
{
echo("Соответствие найдено");
}
else
{
echo("Соответствие не найдено");
}
?>
Результат:
Соответствие найдено
<?
// получаем www-адрес (имя хоста) из url
$url = "http://www.php.net/download.html";
preg_match("/^(http:\/\/)?([^\/]+)/i", $url, $matches);
$host = $matches[2];
echo("www-адрес: $host");
echo("<br>");
// получаем последние два сегмента имени хоста (доменное имя)
preg_match("/[^\.\/]+\.[^\.\/]+$/", $host, $matches);
echo "доменное имя: {$matches[0]}\n";
?>
Результат:
www-адрес: www.php.net
доменное имя: php.net
preg_replace()
mixed preg_replace (mixed pattern, mixed replacement, mixed subject
[,int limit])
Эта функция ищет в строке subject соответствия регулярному выражению pattern, и заменяет их на replacement. Необязательного параметр limit задает число соответствий, которые надо заменить. Если этот параметр не указан, или равен -1, то заменяются все найденные соответствия.
<?
$str = "May 15, 2003";
$pattern = "/(\w+) (\d+), (\d+)/i";
$replacement = "1 \${1} \$3";
print preg_replace($pattern, $replacement, $str);
?>
Результат:
1 May 2003
А вот как можно написать функцию, которая будет практически полным аналогом функции htmlspecialchars.
<?
function my_htmlspecialchats($document)
{
$search = array ("']*?>.*?'si",
"'<[\/\!]*?[^<>]*?>'si",
"'([\r\n])[\s]+'",
"'&(quot|#34);'i",
"'&(amp|#38);'i",
"'&(lt|#60);'i",
"'&(gt|#62);'i",
"'&(nbsp|#160);'i",
"'&(iexcl|#161);'i",
"'&(cent|#162);'i",
"'&(pound|#163);'i",
"'&(copy|#169);'i",
"'&#(\d+);'e");
$replace = array ("",
"",
"\\1",
"\"",
"&",
"<",
">",
" ",
chr(161),
chr(162),
chr(163),
chr(169),
"chr(\\1)");
$text = preg_replace ($search, $replace, $document);
return $text;
}
$doc = "alert;"; // напишем java-скрипт
my_htmlspecialchats($doc); // выводит "alert;"
echo($doc);
?>